MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Element „id” nie pasuje do żadnego pola ani właściwości błędu z zagnieżdżonymi klasami

Krótko mówiąc:chodzi o konwencje. Sterownik MongoDB .NET udostępnia klasę statyczną ConventionRegistry co pozwala na rejestrację własnych konwencji (więcej tutaj ). Dodatkowo istnieją dwie "wbudowane" konwencje __defaults__ i __attributes__ . Kopanie głębiej (sterownik github ) można zauważyć, że rejestruje jedną dość interesującą konwencję:

new NamedIdMemberConvention(new [] { "Id", "id", "_id" })

Co oznacza, że ​​id członkowie będą traktowani jako zwykłe elementy BSON _id.

Jak to naprawić?

Możesz pozbyć się domyślnych konwencji

ConventionRegistry.Remove("__defaults__");

Jednak automatycznie porzucisz wszystkie inne konwencje sterowników, co jest dość ryzykowne. Alternatywnie możesz utworzyć fałszywą właściwość, która zawsze będzie pusta:

public class SubServiceDef
{
    [BsonElement("id")]
    public int Id { get; set; }

    [BsonId]
    public ObjectId FakeId { get; set; }
}

lub możesz po prostu użyć BsonNoId atrybut, który

[BsonNoId]
public class SubServiceDef
{
    [BsonElement("id")]
    public int Id { get; set; }
}

Więc konwencja będzie ustawiać twój id jako IdMember w mapie klas, ale podczas postprocessingu ten atrybut zmusi IdMember do wartości null, a twoja klasa zostanie pomyślnie zdeserializowana



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak znaleźć ciągi z dopasowanymi literami w liście/tablicy za pomocą funkcji lambda?

  2. Jak mogę posortować wyniki zapytań MongoDB według wewnętrznego rozmiaru tablicy?

  3. Mongoose — zwiększanie wartości w tablicy obiektów

  4. Przechowuj plik w GridFS Mongo za pomocą ExpressJS po przesłaniu

  5. Łączenie się z kontenerem docker Mongodb z innego kontenera docker