Какой-то псевдокод:
construct io_service
for each port
open port
start async read ( register read_handler_for_port )
run io_service
read_handler_for_port ()
handle data
start async read ( register read_handler_for_port )
Вы могли отобразить отношение как "ленивое" и записать два запроса для получения данных:
Обычный простой запрос для получения ("ленивых") данных. Например, "выбирают e от Сотрудника e где..."
Тот же запрос с помощью "выборку соединяет" для принуждения, в спящем режиме для выборки "childs". Например, "выбирают e от Сотрудника, оставленного выборку соединения e.department где..."
LLP, Andrea
Можно использовать ICriteria для выборки Сотрудника.
Можно использовать метод SetFetchMode ICriteria, чтобы определить, должен ли Отдел быть выбран, или нет:
Это удостоверится, что Отдел не выбирается:
ICriteria crit = theSession.CreateCriteria (typeof(Employee));
crit.SetFetchMode ("Department", FetchMode.Lazy)
С этим кодом будет выбран отдел.
ICriteria crit = theSession.CreateCriteria (typeof(Employee));
crit.SetFetchMode ("Department", FetchMode.Join)
Некоторые говорят, что это - лучшая практика для использования значения по умолчанию fetchmode в отображениях (который был бы ленив, я предполагаю), и укажите режим выборки в каждом определенном сценарии. (Таким образом, в Ваших репозиториях).
Один способ сделать это состоит в том, чтобы иметь два класса, представляющие сотрудника:
Employee
которому отобразили информацию об отделе через;EmployeeSummary
который только имеет сами данные сотрудника.Оба класса затем имеют независимую привязку на employee
таблица, но только Employee
также имеет отношения на department
определенный.
Затем при необходимости во всей информации, Вы загружаетесь Employee
экземпляры, и когда Вам просто нужна информация о сотруднике, Вы загружаетесь EmployeeSummary
экземпляры.
Можно удалить любое дублирование привязки ORM и бизнес-логики путем представления общего суперкласса как AbstractEmployee
к обоим из классов сотрудника.