2009-08-13 8 views
0

更新:これは完全に間違った仮定です。私はそれを再テストし、十分に私は間違っていた。 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で正しく動作するようです。シーンの後ろに何か起こっていることはありますか?

+0

誰かが興味があれば、良い例と解決策がstackoverflowに掲載されています。 http://stackoverflow.com/questions/1773239/how-can-i-use-fluent-nhibernate-automapping-with-multiple-lists-of-the-ame-type – kimsk

答えて

1

正常に動作しますか?私はちょうどこれをテストし、各コレクションに1人の子供を追加し、それぞれのコレクションに同じ2人の子供がいることが期待されていました。

+0

はい、正しいです。それは実際には機能していません。私は1つのNHibernateセッションでそれをテストし、NHibernateがデータベースからオブジェクトを作成しなかったので、間違っていたと思います。 – kimsk

関連する問題