2

次のコードがあります。MiscellaneousData で抽象的な MiscellaneousDataBase をオーバーライドする必要があります。ただし、IdMemberMap は常に null になります。

スタンドアロンの「通常の」クラスを使用すると機能します。

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 に答える