我能告诉NHibernate不要保存某些对象吗

本文关键字:保存 对象 NHibernate | 更新日期: 2023-09-27 18:16:26

我使用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?或者我应该用别的方法来攻击它吗?

我能告诉NHibernate不要保存某些对象吗

此事件在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;
        }
    }
}

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

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

例如,在save调用之前:

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

还是……如果事情变得更复杂,您可能会考虑为ViewModel使用专用类,并使用AutoMapper来完成这些繁琐的工作。