使用 StringObjectIdGenerator 的映射 Id 在数据库中生成字符串 _id

sam*_*tin 2 c# mongodb

我正在将我的代码转移到新的 2.0 驱动程序,并且遇到了 ObjectIds 问题。

以前,我使用 BsonId 和 BsonRepresentation 属性装饰了字符串 Id 属性。

现在我正在使用类映射

BsonClassMap.RegisterClassMap<Model>(cm =>
       {
           cm.MapIdMember(p => p.Id).SetIdGenerator(StringObjectIdGenerator.Instance);
           cm.SetIgnoreExtraElements(true);
           cm.AutoMap();

       });
Run Code Online (Sandbox Code Playgroud)

在这个例子中模型非常简单

public class Model
{
   public string Id { get; set; }
   public DateTime UpdatedTs { get; set; }
} 
Run Code Online (Sandbox Code Playgroud)

但是插入后,我将对象 id 作为字符串返回,但它也是服务器上的字符串。

MongoVue objectid 的图像是字符串

有什么我想念的吗?

谢谢山姆

sam*_*tin 6

好的,感谢 Craig 对 mongodb 驱动程序团队的一些反馈,我得到的解决方案是:

cm.MapIdMember(p => p.Id)
                .SetIdGenerator(StringObjectIdGenerator.Instance)
                .SetSerializer(new StringSerializer(BsonType.ObjectId));   
Run Code Online (Sandbox Code Playgroud)

就像装饰Id属性的时候一样,你需要设置Representation,在v 2.0中你是通过SetSerializer来做的

HTH