Обновление сущности с помощью NHibernate в Asp.Net - PullRequest
0 голосов
/ 17 июня 2009

Какой рекомендуемый способ обновления сущности? Пока я разобрался двумя способами:

  1. Просто создайте новую сущность с существующим Id и обновленными значениями свойств и используйте session.SaveOrUpdate ()
  2. Используйте DTO, получите существующую сущность, используя session.Load (dto.Id), назначьте новые значения из dto, затем сохраните.

№ 1 требует гораздо меньше усилий, но иногда я получаю исключение: «другой объект с таким же значением идентификатора уже был связан с сеансом». Есть ли простой способ обойти это?

№2, возможно, потребуется дополнительная поездка в БД?

Извините, если на этот вопрос уже ответили, просто не смогли найти ответ.

Спасибо ула

Ответы [ 2 ]

2 голосов
/ 17 июня 2009

Ваш второй вариант с DTO - мой предпочтительный способ. Ваши DTO должны быть привязаны к экрану (DTO Google Bound Screen), чтобы экран и ваш домен могли меняться независимо друг от друга.

Это также не добавит дополнительную поездку к БД, поскольку # 1 потребует отключенного объекта, который должен быть повторно подключен (что вызывает выбор) после факта. Беспокойство по поводу одного дополнительного выбора также сильно пахнет преждевременной оптимизацией.

Что касается конвертации из домена в DTO, я бы порекомендовал взглянуть на AutoMapper.

1 голос
/ 17 июня 2009

Чтобы использовать №1, вы можете попытаться удалить объект из сеанса nHibernates. Это избавит от ошибки об объекте, уже находящемся в сеансе.

Я бы порекомендовал подход № 2. Особенно, если вы хотите добавить какие-либо оптические блокировки. Во многих случаях одно дополнительное попадание в БД не будет таким дорогим.

Редактировать

Чтобы проверить, существует ли уже сущность в сеансе, вы можете использовать метод Contains (obj) в экземпляре сеанса.

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