Mongodb C#序列化

时间:2012-02-14 18:45:43

标签: c# serialization mongodb mongodb-.net-driver

我正在尝试使用10gen C#驱动程序为Mongo Db编写以下代码。我在这里想要实现的是编写一个简单的适配器,以便无缝地缓存C#对象。

RegisterClassMap()无法识别类合约中的CacheId字段。我在MapIdField api上找不到足够的文档。

有人可以帮忙吗?在此先感谢!!

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

1 个答案:

答案 0 :(得分:3)

以下对我有用:

public class MongoCacheStore
{
    public void RegisterClass<T>() where T : class, ICacheable
    {
        BsonClassMap.RegisterClassMap<T>(cm =>
        {
            cm.AutoMap();
            cm.MapIdProperty("CacheId");
        });
    }
}

你必须使用MapIdProperty而不是MapIdField,因为CacheId是一个属性。

您是不是要在界面中没有设置访问者?

此外,如果您安排只调用一次RegisterClass而不是每次都测试IsClassMapRegistered,那就更好了。首先,我不认为它是编写的线程安全(两个线程都可以从调用IsClassMapRegistered得到错误,其中一个在调用RegisterClassMap时会失败)。