Драйвер MongoDB по соглашению пытается отобразить все свойства с именем Id
в _id
в карте классов.Поскольку у вас есть два класса, он регистрирует _id
дважды.Более того, BsonIgnoreIfDefault
будет работать нормально, если Id
было null
, но здесь это не так, поскольку драйвер автоматически сгенерирует значение при вставке нового документа.
Чтобы исправить это, вы можете использовать BsonIgnore
если вы хотите, чтобы один _id
в MongoDB
public class ChildDataModel : DataModel
{
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnore]
public override string Id { get; set; }
}
был сохранен как:
{
"_id" : ObjectId("5cb5fe72e2a22b3848b6a1f6"),
"Created" : ISODate("2019-04-16T16:10:25.908Z"),
"Modified" : ISODate("2019-04-16T16:10:25.914Z"),
"Deleted" : ISODate("2019-04-16T16:10:25.914Z")
}
, или вы можете использовать атрибут BsonNoId
, если хотите сохранить два значенияотдельно:
[BsonNoId]
public class ChildDataModel : DataModel
{
[BsonRepresentation(BsonType.ObjectId)]
public override string Id { get; set; }
}
будет:
{
"_id" : ObjectId("5cb5fecde2a22b3088ef731c"),
"Created" : ISODate("2019-04-16T16:11:56.810Z"),
"Modified" : ISODate("2019-04-16T16:11:56.822Z"),
"Deleted" : ISODate("2019-04-16T16:11:56.822Z"),
"Id" : ObjectId("5cb5fecde2a22b3088ef731c")
}
, но с точки зрения приложения оно все равно будет