-1

私はエンティティで以下のような関係を持っています。私のデータは以下のようになっています。

Id name Child_id
1  Mark   1
1  Mark   2

しかし、where を使用して Id 1 を渡して親を取得しようとすると、2 つの結果が得られますが、子も同じです。

私はここで別の子を期待していました。

Class Parent 
{
int Id {get;set;}
string name {get;set;}
Child Child {get;set;}
}

Class Child
{
int Id {get;set;}
string name {get;set;}

}
4

1 に答える 1

0

同じオブジェクト(ID 1)について異なる真実を伝えるため、このようなデータは壊れていると呼びます

原因:

セッションは参照の同一性を維持するため、データベースから同じ ID を受け取ると、同じ参照が渡されます。したがって、上記のデータを取得すると、NHibernate は最初のオブジェクトを Parent オブジェクトに変換し、2 行目で同じ Id を確認して同じ参照を返します。

考えられる修正:

  • StatelessSession を使用すると、オブジェクトは referenceEuqality なしでそのまま返されます
  • 返されるデータをより健全にする
  • QueryOver と resultTransformer または Linq を使用して、親オブジェクトに直接投影します (追跡されたエンティティはありません)。
于 2013-06-06T11:57:38.613 に答える