我有以下代码。我希望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; }
}
答案 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");
});