我使用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?或者我应该用别的方法来攻击它吗?
此事件在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来完成这些繁琐的工作。