NHibernate.Обновление поля только при первом сохранении - PullRequest
0 голосов
/ 12 июля 2011

Как сделать так, чтобы NHibernate обновлял любое поле ТОЛЬКО при первом сохранении, а не обновлял его на session.Update(obj)?

РЕДАКТИРОВАТЬ: Например, у меня есть сущность A, которая имеет ссылку на сущность B, например:

public class A
{
    // ... some properties
    public virtual B PropB {get; set;}
}

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

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Существует атрибут сопоставления, который эффективно делает свойство доступным только для вставки: update="false".

Однако есть два вопроса с вашим вопросом:

  1. session.Update необновить сущность, очистка сеанса делает.Вам нужно только вызвать session.Update, чтобы присоединить сущности, которые не были загружены сеансом.
  2. Почему вы изменяете свойство, которое не собираетесь обновлять в БД?
0 голосов
/ 13 июля 2011

Я бы использовал DTO в этом случае и обновил бы сущности внутри транзакции.

Псевдо-код:

public StoreB(ADto dto)
{
  using (transaction)
  {
    A entity = session.Get<A>(dto.Id);
    entity.PropB = dto.PropB;
    transaction.Commit();
  }
}

public StoreC(ADto dto)
{
  using (transaction)
  {
    A entity = session.Get<A>(dto.Id);
    entity.PropC = dto.PropC;
    transaction.Commit();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...