Jam*_*len 10 null nhibernate-mapping fluent-nhibernate value-objects
我有一个包含Address作为值对象的person实体:
public Person()
{
WithTable("Person");
Id(x => x.Id);
Component<Address>(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);
});
}
Run Code Online (Sandbox Code Playgroud)
它在NHibernate文档中指出,如果值对象(Address1,Address2等)的所有属性都为null,则整个组件将被映射为null(即Person.Address将为null).这给了我所有地址字段为空的情况下的问题,因为在我的网页中我可能有(我正在做ASP MVC):
<%= Html.TextBoxFor((x => x.Address.Address1))%>
Run Code Online (Sandbox Code Playgroud)
这打破了空引用异常.所以我正在寻找一种简洁的方法将Address设置为一个新的Address()对象而不是null,如果我从数据库加载Person而不手动操作时所有字段都是空的.我打了以下想法:
在我的视图中进行空检查(yuk,可怕)
使数据库字段不可为空(我正在处理遗留数据库)
任何想法?
感谢James的想法(请参阅他的回答和评论),我修改了Person实体的Address属性:
public virtual string Address { get; set; }
Run Code Online (Sandbox Code Playgroud)
至:
private Address _address;
public virtual Address Address
{
get { return _address ?? new Address(); }
set { _address = value; }
}
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题,它的工作原理,似乎与NHibernate一起使用.Yey!
我没有任何明确的答案来创建未映射的方法/属性访问器,并且如果实际地址为空,则返回默认/空对象。
public Address GetAddressOrDefault()
{
return Address ?? new NullAddress();
}
Run Code Online (Sandbox Code Playgroud)
或者与第一个类似,为您Address
在视图中使用的包装器创建一个。
public class AddressViewData
{
private Address address;
public AddressViewData(Address address)
{
this.address = address ?? new NullAddress();
}
// expose all address properties as pass-throughs
public string Street
{
get { return address.Street; }
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3834 次 |
最近记录: |