wsky's blog,Record my technical life

just coding

导航

Castle的Nullables和。net空值处理

晚上在一个开源群里,一个朋友提出了个关于使用castle时候空值处理的问题

要在字段里插入空值

castle有提供一组空值类型,可以如下实现:
[Property]

public NullableDateTime CreatedDate

{

   
get { return _createdDate; }

   
set { _createdDate = value; }

}


 

[Property]

public NullableInt32 Count

{

   
get { return _count; }

   
set { _count = value; }

}

ActiveRecord提供的空属类型与实际类型对照表

CLR Basic Type

Nullable Type

System.Boolean

Nullables.NullableBoolean

System.Byte

Nullables.NullableByte

System.Char

Nullables.NullableChar

System.DateTime

Nullables.NullableDateTime

System.Decimal

Nullables.NullableDecimal

System.Double

Nullables.NullableDouble

System.Guid

Nullables.NullableGuid

System.Int16

Nullables.NullableInt16

System.Int32

Nullables.NullableInt32

System.Int64

Nullables.NullableInt64

System.SByte

Nullables.NullableSByte

System.Single

Nullables.NullableSingle

注意在使用空属类型时需要添加以下引用

Nullables.dll

Nullables.NHibernate.dll

【上面引用了TerryLee老师的一些博客资料】



但是在使用的时候出现一些转换上的问题,看起来不兼容的样子,具体代码情况那位朋友没有说清楚,
只是需要在一个字段插入Null值

于是我提出说可以直接设置NotNull=false 就可以忽略初始化时候赋值,
但是这样做的结果是 int字段的值自动填为0,也就是说这样设置依然有在持久化的时候使用该属性,并设置了默认的值

那么Nullable类型的属性看来是很有必要的了,

回头想想,.net很强大,对这种情况会没有考虑到吗?
不知你是否注意到int? i;这样的声明。

嗯,这就是解决问题的方法~

private int? _count;
[Property]
public int? Count
{
get { return _count; }
set { _count = value; }
}


问题就这样解决~

。net2.0开始,支持空值,这样就不会再自动默认为0了~呵呵 不知道在看书的时候是否忘记还有这么个好用的特性呢~^^

posted on 2008-04-11 23:12  wsky  阅读(534)  评论(0编辑  收藏  举报