我正在使用带有NullObject模式的NHibernate来使我的视图更简单。 我使用James Gregory发现的here解决方案
public Address GetAddressOrDefault()
{
return Address ?? new NullAddress();
}
And Person有一个Address属性等等......
这是非常好的,直到我尝试为没有地址的人保存我的Person对象。由于我创建了NullPerson对象的新实例,NHibernate将尝试保存它。并告诉我:
ids for this class must be manually assigned before calling save():
有什么方法可以让NHibernate不尝试保存我的NullObjects?或者我还有其他方法可以攻击这个吗?
答案 0 :(得分: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;
}
}
}
答案 1 :(得分:1)
我知道你可能已经考虑过这个但最简单的解决方案似乎与
相反public Address GetAddressOrDefault()
{
return Address ?? new NullAddress();
}
即,在您的保存电话之前:
public Address GetAddressOrNull(Address address)
{
return address is NullAddress ? null : address;
}
或者......如果事情变得更复杂并使用AutoMapper来完成猴子工作,您可以考虑为ViewModel使用专用类。