2

我有以下代码。我希望 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; }
}
4

1 回答 1

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");
});
于 2013-05-07T17:43:16.107 回答