2011-12-20 95 views
1

这是一个很好的做法,当我需要通过属性传递DBNULL。使它们成为可空类型。因为我们需要将Null值传递给后端的变量。我们将它们设置为Nullable.But这样也可以使用Properties。将对象的属性设置为可为空类型?

回答

2

在某些情况下,你真的没有选择。例如T-SQL bit数据类型(它是.NET中的一个类型BOOL);在T-SQL,也可以是NULL,0或1。所以,你必须将其设置为可空类型,因为这样的:

public bool? MySqlBitField { get; set; } 

更新:我做这本书框架设计指南的快速参考( Cwalina,Abrams),来自Addison Wesley的Nullable类型及其用法。我已经粘贴了书中的一些文字。顺便说一句,我会强烈推荐这本书作为一个很好的一般参考。

从书:

使用可为空来表示可能不存在(即,可选的值)值考虑。例如,当使用表示可选表列的属性从数据库返回强类型记录时使用它。

除非以类似的方式使用引用类型,否则不要使用Nullable,这是因为引用类型值可以为null。

例如,您不会使用null来表示可选参数。

// bad design 
public class Foo { 
    public Foo(string name, int? id); 
} 

// good design 
public class Foo { 
    public Foo(string name, int id); 
    public Foo(string name); 
} 

AVOID使用Nullable来表示一般的三态值。只能用Nullable表示真正可选的布尔值:true,false和not available。如果您只想表示三种状态(例如,是,不,取消),请考虑使用枚举。

AVOID使用System.DBNull。优先选择Nullable。

从巴勃罗·卡斯特罗

可空注意是一般较好的可选的数据库值的表示。有一点需要考虑,虽然Nullable允许您表示空值的能力,但您不会获得数据库空操作语义。具体而言,您不会通过运算符和函数获得空传播。如果你非常关心传播语义,可以考虑坚持DBNull。

相关问题