如何处理业务对象中的空值

Max*_*Max 1 c# sql-server asp.net business-objects

假设我有一个像这样的自定义类:

public class Customer    
{        
 public int CustomerID { get; set; }        
 public string CompanyName { get; set; }        
 public string BusinessAddress { get; set; }        
 public string Phone { get; set; } 
 public int ParentID { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

我使用datareader从数据库创建自定义对象.例如:

  while (dr.Read())
  {
    listCustomers.Add(new Customer(
          Convert.ToInt32(dr["CustomerID"]),
          Convert.ToString(dr["CompanyName"]),
          Convert.ToString(dr["BusinessAddress"]),
          Convert.ToString(dr["Phone"]),
          Convert.ToInt32(dr["ParentID"]),
)
Run Code Online (Sandbox Code Playgroud)

ParentID在数据库中可以为null(我无法更改它).当它为null时,转换显然会失败.

我应该如何处理从数据库中检索的空值来填充我的业务对象?在我的自定义类中使用Nullable Types会不会很好?还有其他提示吗?

Ant*_*lev 6

绝对.可空类型非常好.否则,你必须提出一些愚蠢的约定a-la"当ParentID为-1时,这意味着Customer没有父亲".可空类型强制执行"按设计":如果没有父级,ParentID则会null.

至于保护对象,请考虑使用ORM工具(例如NHibernateBLToolkit),因为您实际上并不想花费50%的开发时间来编写SQL查询并从数据读取器填充对象