Могу ли я сказать NHibernate не сохранять определенные объекты? - PullRequest
2 голосов
/ 01 декабря 2011

Я использую NHibernate с шаблоном NullObject, чтобы упростить свои представления. Я использую решение, найденное здесь Джеймсом Грегори

public Address GetAddressOrDefault()
{
  return Address ?? new NullAddress();
}

И у Person есть свойство Address и так далее ...

Это работает очень хорошо, пока я не попытаюсь сохранить свой объект Person для человека без адреса. Поскольку я создал новый экземпляр объекта NullPerson, NHibernate попытается его сохранить. И дает мне это:

ids for this class must be manually assigned before calling save():

Могу ли я получить NHibernate, чтобы не пытаться сохранить мои NullObjects? Или есть какой-то другой способ, которым я должен атаковать это?

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Это событие вызывается при сохранении или SaveOrUpdate. Возможно, вы могли бы создать свой собственный слушатель SaveOrUpdate, который затем установил бы для любых NullObjects значение null.

public class MySaveOrUpdateEventListener : ISaveOrUpdateEventListener
{
    public void OnSaveOrUpdate(SaveOrUPdate @event)
    {
        if (@event.entity is Person)
        {
            var person = (Person)@event.entity;
            if (person.Address is NullAddress)
                person.Address = null;
        }
    }
}
1 голос
/ 01 декабря 2011

Я знаю, что вы, вероятно, рассмотрели это, но простое решение, похоже, противоположно

public Address GetAddressOrDefault()
{
  return Address ?? new NullAddress();
}

, т. Е. До вызова сохранения:

public Address GetAddressOrNull(Address address)
{
  return address is NullAddress ? null : address;
}

Или.Вы можете рассмотреть использование выделенного класса для вашей ViewModel, если все усложняется, и использовать AutoMapper для выполнения работы обезьяны.

...