经过试用发现一个问题:
当在类里使用泛型来处理nullable的字段时,如果对用databind方法进行数据编写的如gridview,formview,detaisview等控件.采用自动生成列将得不到实体类里声明为nullable的列值.但是在程序里通过entity.attribute()是可以得到这个字段里的值的.这就说明问题不在于实体类或者IBtais上,而在于gridview控件上.
通过搜索网页,发现gridview有一个IsBindableType的方法,用于检测并处理绑定列的类型,而默认的此方法并未处理nullable类型的字段,所以造成gridview不能自动生成列.给出的解决方法是重写IsBindableType方法:
public static bool IsNullableType(Type type)
{
return type.IsGenericType &&
type.GetGenericTypeDefinition() == typeof(Nullable<>);
}
通过上面的方法来检测nullable类型.
public override bool IsBindableType(Type type)
{
return NullableHelper.IsNullableType(type)
|| base.IsBindableType(type);
}