我有一个基类Entity,它有一个字符串Id成员和一个派生类A.
但是在创建派生类的新实例并使用InsertOneAsync将其添加到我的集合时,文档将添加到数据库中,并将null作为Id值。
使用ObjectId作为Id似乎确实有效,但我正在尝试阻止模型中的MongoDB依赖。
我还尝试了以下代码,但结果是一样的:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
});
答案 0 :(得分:13)
我有同样的问题,并最终使用这些属性(使用2.0驱动程序):
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnoreIfDefault]
或等效的BsonClassMap流畅界面:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
我尝试使用。UpplaceOneAsync和Upsert一起工作,但总是让id仍为null
答案 1 :(得分:0)
您是否尝试不在模型中使用ObjectID。 ID不必是objectID。您可以将字符串字段装饰为ID。
我使用了[BsonId]
属性的字符串属性而没有任何问题。