それを FNH でマッピングしようとしたところ、多くの問題が発生し、最終的に FNH が不足しており、もう維持されていないことがわかったので、これまでのところ動作しますがドキュメントがない Nhibernate MappingByCode を試すことにしました...
IDictionary をマップする方法が見つかりません
Map(x => x.EntityDict,
m =>
{
m.Key(k => k.Column("ParentID"));
},
km =>
{
km.//??ManyToMany
vm =>
{
vm.//??ManyToMany
}
);
km(キー マッピング) のオプションは、要素 (値の型)/コンポーネント (同じテーブルの内部オブジェクト)/ManyToMany (このコンテキストではよくわかりません) です。
最も論理的なことのように見えるので、両方で ManyToMany を使用しようとしましたが、機能しませんでした。
ディクショナリを保存するときに SaveUpdate は成功しましたが、DB に正しく保存されず、ディクショナリを取得できませんでした。
編集:ここに辞書構造のサンプルがあります
public class Entity1Map : ClassMapping<Entity1>
{
public Entity1Map()
{
Id(x=> x.ID,m=>m.Generator(Generators.Guid));
}
}
public class Entity2Map : ClassMapping<Entity2>
{
public Entity2Map()
{
Id(x=> x.ID,m=>m.Generator(Generators.Guid));
}
}
public class Entity3 { public IDictionary<Entity1,Entity2> Dict { get;set; } }
public class Entity3Map : ClassMapping<Entity3>
{
public Entity3Map()
{
Id(x=> x.ID,m=>m.Generator(Generators.Guid));
//Map Dict??
}
}
テーブル構造について -
Entity1 Table : ID Column
Entity2 Table : ID Column
Entity3 Table : ID Column
Dict Table : Entity3_ID,Entity1_ID,Entity2_ID
別のデータベースに保存され、DB から再作成される場合、このテーブル構造である必要はありません
@ダニエル-ここにhbmがあります
<map name="Targets" table="Dict">
<key column="Entity3ID" />
<map-key-many-to-many class="Entity1" column="Entity1ID" />
<many-to-many class="Entity2" column="Entity2ID" />
</map>
編集3(私は思う):
var entity3 = new Entity3();
var entity1 = new Entity1();
var entity2= new Entity2();
entity3.Dict[entity1] = entity2;
using (var session = GetSession())
{
session.SaveOrUpdate(entity1);
session.SaveOrUpdate(entity2);
session.SaveOrUpdate(entity3 );
session.Flush();
}