Получение одного и того же объекта с тем же идентификатором, но с другим дочерним идентификатором 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 для проецирования непосредственно в родительский объект (без отслеживаемой сущности)