更新:これは完全に間違った仮定です。私はそれを再テストし、十分に私は間違っていた。 NHibernateは、すべての子ローを両方の子リストに取得するSQLを生成します。コメントをいただき、ありがとうございました。より良い質問は、私たちがこの仕事のように何かできるかということです。NHibernateはどのクラスプロパティに値を入れるのかをどのように知っていますか?
コードをFluent NHibernate Examples of Wikiで少し修正しました。 althou、あなたが見ることができるよう
モデル
public class Parent
{
public IList<Child> Children1 { get; set; }
public IList<Child> Children2 { get; set; }
}
public class Child
{}
スキーマ
table Parent (
ID int primary key
)
table Child (
ID int primary key,
ParentID int
)
流暢マッピング
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
HasMany<Child>(x => x.Children1);
HasMany<Child>(x => x.Children2);
}
}
例えば、Parent
クラスが2つのChild
リスト(すなわち、Children1
およびChildren2
)を持っている場合、データベーステーブルにマップされるとき、どの子ローがChildren1
またはChildren2
リストにあるかを示すテーブルはありません。
データベースの観点からは、どの子ローがどの親に属しているかわかりますが、どの子ローはどの子リストに属していないかだけわかります。
しかし、これはNHibernateで正しく動作するようです。シーンの後ろに何か起こっていることはありますか?
誰かが興味があれば、良い例と解決策がstackoverflowに掲載されています。 http://stackoverflow.com/questions/1773239/how-can-i-use-fluent-nhibernate-automapping-with-multiple-lists-of-the-ame-type – kimsk