InsertOneAsync后MongoDB id保持为空
我有一个基类实体,它有一个字符串Id成员和一个派生类a 但是,当创建派生类的新实例并使用InsertOneAsync将其添加到我的集合时,该文档将以null作为Id值添加到数据库中 使用ObjectId作为Id似乎确实有效,但我试图在我的模型中防止MongoDB依赖 我还尝试了以下代码,但结果是一样的:InsertOneAsync后MongoDB id保持为空,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我有一个基类实体,它有一个字符串Id成员和一个派生类a 但是,当创建派生类的新实例并使用InsertOneAsync将其添加到我的集合时,该文档将以null作为Id值添加到数据库中 使用ObjectId作为Id似乎确实有效,但我试图在我的模型中防止MongoDB依赖 我还尝试了以下代码,但结果是一样的: BsonClassMap.RegisterClassMap<Entity>(cm => { cm.MapIdField(x => x.Id).SetSeriali
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
});
BsonClassMap.RegisterClassMap(cm=>
{
cm.MapIdField(x=>x.Id).SetSerializer(新的StringSerializer(BsonType.ObjectId));
});
您是否试图在模型中不使用ObjectID。ID不必是objectID。可以将字符串字段修饰为ID
我在
[BsonId]
属性中使用了字符串属性,但没有任何问题。我也遇到了同样的问题,并最终使用这些属性(使用2.0驱动程序)使其正常工作:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
[BsonIgnoreIfDefault]
或等效的BsonClassMap fluent接口:
BsonClassMap.RegisterClassMap<Entity>(cm =>
{
cm.MapIdField(x => x.Id)
.SetSerializer(new StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
BsonClassMap.RegisterClassMap(cm=>
{
cm.MapIdField(x=>x.Id)
.SetSerializer(新的StringSerializer(BsonType.ObjectId))
.SetIgnoreIfDefault(true);
});
我尝试在Upsert打开时使用.ReplaceOneAsync获得相同的结果,但这总是会使id仍然为空处的文档确实表明,如果id为空,它应该自动生成一个id。但是,即使使用BsonId属性(因为成员的名称是Id,所以不需要这个属性),这对我来说也不起作用。仅当我将类型更改为ObjectId时,才会按预期自动生成值。所以这可能是一个bug(我使用的是MongoDB.Driver的2.0.0版)。在保存后检索Id时有问题吗?对于原始问题,我找到了与您相同的解决方案,但现在我似乎无法获取新保存对象的Id。