我有一个包含Address作为值对象的person实体:
public Person() { WithTable("Person"); Id(x => x.Id); Component(x => x.Address, a => { a.Map(x => x.Address1); a.Map(x => x.Address2); a.Map(x => x.Address3); a.Map(x => x.Town); a.Map(x => x.Postcode); }); }
它在NHibernate文档中指出,如果值对象(Address1,Address2等)的所有属性都为null,则整个组件将被映射为null(即Person.Address将为null).这给了我所有地址字段为空的情况下的问题,因为在我的网页中我可能有(我正在做ASP MVC):
<%= Html.TextBoxFor((x => x.Address.Address1))%>
这打破了空引用异常.所以我正在寻找一种简洁的方法将Address设置为一个新的Address()对象而不是null,如果我从数据库加载Person而不手动操作时所有字段都是空的.我打了以下想法:
在我的视图中进行空检查(yuk,可怕)
使数据库字段不可为空(我正在处理遗留数据库)
任何想法?
感谢James的想法(请参阅他的回答和评论),我修改了Person实体的Address属性:
public virtual string Address { get; set; }
至:
private Address _address; public virtual Address Address { get { return _address ?? new Address(); } set { _address = value; } }
这解决了我的问题,它的工作原理,似乎与NHibernate一起使用.Yey!