-1

我在我的实体中有一个关系,如下所示。我的数据如下所示。

Id name Child_id
1  Mark   1
1  Mark   2

但是,当我试图通过使用 where 传递 Id 1 来获取父级时,它给了我两个结果,两者都完全相同,即使子级也相同。

我在这里期待不同的孩子。

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 对象,并且在第二行看到相同的 Id 并返回相同的引用。

可能的修复:

  • 使用 StatelessSession 然后对象按原样返回,没有 referenceEuqality
  • 使返回的数据更加理智
  • 使用 QueryOver 和 resultTransformer 或 Linq 直接投影到父对象(没有跟踪实体)
于 2013-06-06T11:57:38.613 回答