Mongo db C# serialization
本文关键字:serialization db Mongo | 更新日期: 2023-09-27 18:24:27
我正在尝试使用Mongo-Db的10gen C#驱动程序编写以下代码。我在这里试图实现的是编写一个简单的适配器,以便无缝缓存C#对象。
RegisterClassMap()无法识别类协定中的CacheId字段。我在MapIdFieldapi上找不到足够的文档。
有人能帮忙吗?提前感谢!!
public interface ICacheable
{
byte[] CacheId { get; }
}
public class Contract : ICacheable
{
public byte[] CacheId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class MongoCacheStore
{
private void RegisterClass<T>() where T : class, ICacheable
{
if (!BsonClassMap.IsClassMapRegistered(typeof(T)))
{
BsonClassMap.RegisterClassMap<T>();
BsonClassMap.RegisterClassMap<T>(cm =>
{
cm.AutoMap();
**cm.MapIdField("CacheId");**
});
}
}
}
以下对我有效:
public class MongoCacheStore
{
public void RegisterClass<T>() where T : class, ICacheable
{
BsonClassMap.RegisterClassMap<T>(cm =>
{
cm.AutoMap();
cm.MapIdProperty("CacheId");
});
}
}
您必须使用MapIdProperty而不是MapIdField,因为CacheId是一个属性。
您的意思是在接口中没有set访问器吗?
此外,如果安排只调用RegisterClass一次,而不是每次都测试IsClassMapRegistered,效果会好得多。首先,我认为它不像编写的那样是线程安全的(两个线程都可能在调用IsClassMapRegistered时返回false,其中一个线程在调用RegisterClassMap时会失败)。