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