我有一个基类 Entity,它有一个字符串 Id 成员和一个派生类 A。
但是当创建派生类的新实例并使用 InsertOneAsync 将其添加到我的集合时,文档将添加到数据库中,Id 值为 null。
使用 ObjectId 作为 Id 似乎可行,但我试图防止我的模型依赖 MongoDB。
我也尝试了下面的代码,但是结果是一样的:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
});
最佳答案
我遇到了同样的问题,并最终使用这些属性让它工作(使用 2.0 驱动程序):
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnoreIfDefault]
或等效的 BsonClassMap 流畅接口(interface):
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
我尝试在打开 Upsert 的情况下使用 .ReplaceOneAsync 进行相同的工作,但这总是使 id 仍然为空
关于InsertOneAsync 后 MongoDB id 保持为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29799842/