Будьте в спящем режиме режим выборки изменения во времени выполнения

Какой-то псевдокод:

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 )
5
задан Loki 2 February 2009 в 13:53
поделиться

3 ответа

Вы могли отобразить отношение как "ленивое" и записать два запроса для получения данных:

  • Обычный простой запрос для получения ("ленивых") данных. Например, "выбирают e от Сотрудника e где..."

  • Тот же запрос с помощью "выборку соединяет" для принуждения, в спящем режиме для выборки "childs". Например, "выбирают e от Сотрудника, оставленного выборку соединения e.department где..."

LLP, Andrea

10
ответ дан 18 December 2019 в 07:32
поделиться

Можно использовать 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 в отображениях (который был бы ленив, я предполагаю), и укажите режим выборки в каждом определенном сценарии. (Таким образом, в Ваших репозиториях).

8
ответ дан 18 December 2019 в 07:32
поделиться

Один способ сделать это состоит в том, чтобы иметь два класса, представляющие сотрудника:

  • Employee которому отобразили информацию об отделе через;
  • EmployeeSummary который только имеет сами данные сотрудника.

Оба класса затем имеют независимую привязку на employee таблица, но только Employee также имеет отношения на department определенный.

Затем при необходимости во всей информации, Вы загружаетесь Employee экземпляры, и когда Вам просто нужна информация о сотруднике, Вы загружаетесь EmployeeSummary экземпляры.

Можно удалить любое дублирование привязки ORM и бизнес-логики путем представления общего суперкласса как AbstractEmployee к обоим из классов сотрудника.

2
ответ дан 18 December 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: