晚上在一个开源群里,一个朋友提出了个关于使用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了~呵呵 不知道在看书的时候是否忘记还有这么个好用的特性呢~^^
作者:wsky (huangxu)
出处:http://wsky.cnblogs.com/
以上文字若无注明转载字样则为个人原创,转载请保留签名
Tag标签: c#,Castle,ORM,空值,Nullables