在InsertOneAsync

时间:2015-04-22 13:56:57

标签: mongodb mongodb-.net-driver

我有一个基类Entity,它有一个字符串Id成员和一个派生类A.

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

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

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

BsonClassMap.RegisterClassMap<Entity>(cm =>
{
    cm.MapIdField(x => x.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
});

2 个答案:

答案 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]属性的字符串属性而没有任何问题。