Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
InsertOneAsync后MongoDB id保持为空_Mongodb_Mongodb .net Driver - Fatal编程技术网

InsertOneAsync后MongoDB id保持为空

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

我有一个基类实体,它有一个字符串Id成员和一个派生类a

但是,当创建派生类的新实例并使用InsertOneAsync将其添加到我的集合时,该文档将以null作为Id值添加到数据库中

使用ObjectId作为Id似乎确实有效,但我试图在我的模型中防止MongoDB依赖

我还尝试了以下代码,但结果是一样的:

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。