UnitOfWork в действии - PullRequest
       0

UnitOfWork в действии

0 голосов
/ 18 июня 2010

Я хочу представить вам свой сценарий применения форм Windows:

Я хочу создать счет-фактуру, поэтому я открываю новое окно с деталями счета-фактуры.Затем я хочу добавить нового клиента (в базу данных), который я хочу использовать в своем счете.После ввода всей информации (включая информацию о новом клиенте) я нажимаю кнопку «Сохранить», чтобы сохранить новый документ.

Вопрос в том, должен ли я выполнять всю работу за одну сессию NH?Таким образом, сохранение нового клиента и сохранение счета в одной единице работы.

Или, возможно, сохранение нового клиента должно быть сделано отдельно?Если да, то если я добавлю нового клиента и нажму кнопку «Отмена» в форме сведений о счете, то создание счета будет отменено, но клиент все еще находится в базе данных.

Я использую одну единицу работы для всего диалога.Может быть, я ошибаюсь.

Ответы [ 3 ]

0 голосов
/ 19 июня 2010

я должен сделать всю работу за одну сессию NH?Поэтому сохранение нового клиента и сохранение счета в одной единице работы.

Да, используйте один сеанс NHibernate.Как правило, проще всего сопоставить время жизни сеанса с одной единицей работы.

Не путайте сессии с транзакциями.Если вы хотите откатить оба создания в случае сбоя одного создания, это требует транзакции и (в основном) не имеет никакого отношения к сеансу NHibernate.

0 голосов
/ 21 июня 2010

Диалог для бизнес-транзакции - ваш друг:

Код указан в unhaddins, и у нас есть двапримеры для настольных приложений.Одним из них является мой "Chinook Media Manager" (ищите посты в гугле).Существует также реализация, использующая PostSharp в стволе unhaddins.

0 голосов
/ 18 июня 2010

Логично, что было бы целесообразно создать клиента в единице работы, а затем создать счет в другой. Однако, поскольку вы, похоже, хотите, чтобы создание счетов-фактур и клиента было вместе, было атомарным, имеет смысл создать их за один коммит.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...