NHibernate - LazyLoad один к нулю - PullRequest
1 голос
/ 20 мая 2009

Я борюсь с NHibernate и его ленивой нагрузкой.

У меня есть структура, которую я упростил, но она показывает мою проблему.

Class Shift {
 int ShiftID;
 DateTime ShiftStart;
 Employee Employee;
}

Class Employee {
 int EmployeeID;
 string Name;
}

Данные:

 ShiftData
 ID                         SHIFTTIME       EmployeeID (int)
 1                           12:00                  0
 2                           13:00                  1
 3                           14:00                  0                           
 4                           13:00                  3


Employees
ID                         NAME
1                           Morten
2                           Peter
3                           Henrik

Моя стратегия загрузки для смены заключается в использовании соединения, чтобы при загрузке смены NHibernate автоматически выполнял соединение слева, чтобы получить клиента. Это отлично работает для смен с прикрепленными сотрудниками, однако в некоторые смены пока нет сотрудников.

Когда я пытаюсь получить доступ к Сотруднику такой смены после загрузки смены, это приводит к другому ВЫБОРУ для базы данных (обнаруживается с помощью вашего NHProfiler) Почему это происходит?

Надеюсь, у вас есть ответ, я действительно застрял на этом.

1 Ответ

1 голос
/ 21 мая 2009

Я предполагаю, что это происходит из-за того, что в сменах без сотрудников будет пустой прокси Employee. NHibernate видит пустой прокси и покорно пытается загрузить данные из базы данных.

Что касается решения, просмотр вашего отображения действительно поможет. Однако вы можете попытаться убедиться, что для отношения задан атрибут fetch = "join", или отключить отложенную загрузку для этого отношения.

...