NHibernate中可空类型配置出错:
1. .hbm
<!-- 用户ID -->
<property name="UserID" type="System.Nullable`1[[System.Int64, mscorlib]], mscorlib">
<column name="UserID" sql-type="bigint" length="8" not-null="false"/>
</property>
2. Domain
private Int64? _UserID;
/// <summary>
/// 用户ID
/// </summary>
public virtual Int64? UserID
{
set { _UserID = value; }
get { return _UserID; }
}
3. 错误内容:
在列“UserID0_0_”上的 GetBytes 尝试无效。GetBytes 函数只能用在 Text、NText 或 Image 类型的列上。
将 <column name="UserID" sql-type="bigint" length="8" not-null="false"/>
改为 <column name="UserID"/> 试试
经分析测式,是因为lentgh="8"引起,去掉该属性就成功了。
<column name="UserID" sql-type="bigint" length="8" not-null="false"/>
个人总结:Int64非可空类型时,加length是正确的;但为Int64?可空类型时,指定length后,会强制转换,导致出错。
是Int64?的错吗?为什么要加?呢,虽然好像见过,但是不知道为什么
我一般直接用 public virtual int ID { get; set; },
菜鸟入门,专业帮顶,希望有人能帮忙解决一下
Int64?表示可空类型,对应DB中的null
@天涯人: 学习了
用属性,不是用字段。。