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");**
            });
        }
    }
}

Mongo db C# serialization

以下对我有效:

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时会失败)。