Получение одного и того же объекта с тем же идентификатором, но с другим дочерним идентификатором nhibernate

У меня есть отношения в моих энтузиастах как один ниже. Мои данные поступают, как показано ниже.

Id name Child_id
1  Mark   1
1  Mark   2

Но когда я пытаюсь получить родителя, передавая Id 1, используя where, это дает мне два результата, оба одинаковы, даже child также одинаков.

Я ожидал другого ребенка здесь.

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

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

}

1 ответ

Я бы назвал такие данные неработающими, поскольку они говорят разные истины об одном и том же объекте (с идентификатором 1)

Причина:

Сеанс поддерживает эталонную ссылку, поэтому, когда вы получаете тот же Id из базы данных, он передаст вам ту же ссылку. Поэтому, когда вы получите данные выше, NHibernate преобразует первый в родительский объект, а во второй строке видит тот же Id и возвращает ту же ссылку.

Возможные исправления:

  • Используйте StatelessSession, тогда объекты возвращаются как есть без referenceEuqality
  • сделать данные возвращены более вменяемым
  • используйте QueryOver и resultTransformer или Linq для проецирования непосредственно в родительский объект (без отслеживаемой сущности)
Другие вопросы по тегам