MongoDb注册类映射

时间:2013-05-01 16:58:07

标签: c# .net mongodb

我有以下代码。我希望MiscellaneousData覆盖一个抽象的MiscellaneousDataBase。但是,IdMemberMap始终为空。

使用独立的'正常'班级工作。

if (!BsonClassMap.IsClassMapRegistered(typeof(MiscellaneousData)))
{
    BsonClassMap.RegisterClassMap<MiscellaneousData>(cm =>
    {
        cm.AutoMap();
        cm.SetIdMember(cm.GetMemberMap(c => c.Key));
        cm.IdMemberMap.SetIdGenerator(StringObjectIdGenerator.Instance);
    });
}

以下是杂项数据及其基础 - 为清晰起见减少了数据:

public abstract class MiscellaneousDataBase
{
    [XmlIgnore]
    public abstract string Key { get; set; }
}

public class MiscellaneousData : MiscellaneousDataBase
{
    public override string Key { get; set; }
}

1 个答案:

答案 0 :(得分:3)

创建类映射时,将每个成员映射到声明它的级别,因此需要分别映射MiscellaneousDataBase和MiscellaneousData。

下面是一些示例代码,展示了如何分别映射每个类(我在子类中添加了一个X属性,因此可以在该级别进行映射)。

使用这些类:

public abstract class MiscellaneousDataBase
{
    public abstract string Key { get; set; }
}

public class MiscellaneousData : MiscellaneousDataBase
{
    public override string Key { get; set; }
    public int X { get; set; }
}

尝试像这样映射它们:

BsonClassMap.RegisterClassMap<MiscellaneousDataBase>(cm =>
{
    cm.AutoMap();
    cm.SetIdMember(cm.GetMemberMap(c => c.Key));
    cm.IdMemberMap.SetIdGenerator(StringObjectIdGenerator.Instance);
});

BsonClassMap.RegisterClassMap<MiscellaneousData>(cm =>
{
    cm.AutoMap();
    cm.GetMemberMap(c => c.X).SetElementName("x");
});