如何制作 ObjectId 的字符串表示形式,而不必为每个成员指定它

ssn*_*ssn 5 c# mongodb

我将 MongoDB 与 C# 官方 MongoDb 驱动程序一起使用。

我的域对象都有一个字符串类型的 Id 属性

string Id { get; set;}
Run Code Online (Sandbox Code Playgroud)

但我想在实际数据库中存储 12 字节的二进制 ObjectId,这是在类映射中实现的,如下所示:

  BsonClassMap.RegisterClassMap<X>(cm => {
    cm.AutoMap();
    cm.GetMemberMap(c => c.Id).SetRepresentation(BsonType.ObjectId);
  });
Run Code Online (Sandbox Code Playgroud)

其他集合的外部 ObjectId 键也表示为字符串,并且也应保存为对象 ID。

现在,如果可以避免的话,我不想为每个 Id 和外键编写相同的 SetRepresenttion 内容。

那么有没有一种方法可以一劳永逸地说,所有字符串 Id 字段都应该在数据库中表示为 ObjectId,并且所有名称以“Id”结尾的字符串属性也应该在数据库中表示为 ObjectId?

Cra*_*son 1

有一个称为 ISerializationOptionsConvention 的约定。请查看此处的文档:http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-Writeacustomconvention

使用此功能,您将能够测试成员类型是否为字符串以及以“Id”结尾的名称,然后为其分配序列化选项。