2

我使用 NHibernate 和 NullObject 模式来简化我的视图。我使用James Gregory在此处找到的解决方案

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?或者我还有其他方法应该攻击这个吗?

4

2 回答 2

3

此事件在 Save 或 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;
        }
    }
}
于 2011-12-01T17:24:37.057 回答
1

我知道您可能已经考虑过这一点,但最简单的解决方案似乎与

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

即,在您的保存电话之前:

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

或者...如果事情变得更复杂,您可能会考虑为您的 ViewModel 使用专用类并使用AutoMapper来完成猴子工作。

于 2011-12-01T14:15:21.950 回答