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

本文关键字:不必 成员 ObjectId 何制作 字符串 表示 | 更新日期: 2023-09-27 18:36:14

我正在使用MongoDB和官方的MongoDb 驱动程序用于C#。

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

string Id { get; set;}

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

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

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

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

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

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

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

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