我目前正在撰写财务应用程序,我们有一个非常标准的客户表。它由许多必填字段组成,还有一些可选字段,例如Cell / Fax等。我使用NHibernate作为ORM并且所有映射都正确。它已经有效了。

我只是想知道,我怎么<!>“快递<!>”在代码中,如果字段不为空而没有注释?我有记录这个的hbm.xml文件,但是对于这样的事情看它们有点尴尬。

我想到的另一件事是我不希望存储库在我的Logic中抛出NHibernate Exceptions,所以也许我应该在Controller中使用验证路径。 不过,我怎样才能让POCO代码表示某些字段可以为空?

正如您所看到的,我希望手机和传真是可选的,而手机是强制性的。它们都只是复合映射,因此映射文件只指定每个元素的单个元素必须不为null,但我不想一直进行Person.Cellular!= null检查以避免出现NullReferenceException。

有帮助吗?

解决方案

根据您的POCO行为和编码风格,有几种方法可以执行此操作。 首先,您可以使用可空类型来表示此字段可以为空,因此隐含其余的不可为空。 或者,您可以引入Phone值类型作为您所说明的POCO的Phone属性的类型,这意味着因为它不是原始类型,所以它是<!>“更重要的<!>”; - 这也可以让你在课堂上封装电话号码验证。

在我看来,要成为一个真正的POCO对象,它不必担心它所持有的数据库表中的底层可空性......它实际上应该具有表示其作为独立实体的行为的验证和值类型;因此,在它进入NHibernate之前,它已经处于有效状态。

其他提示

只读取非空的属性并通过公共构造函数写入它们。使默认构造函数受保护或私有。

public class DomainObject{
private string nnp;
protected DomainObject(){}
public DomainObject(string nnp){
this.nnp = nnp;
}
public string NotNullProp {get {return nnp;}}
public string NullableProp {get;set;} 
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top