当我运行以下代码时:
List<Dag> result = session.CreateCriteria<Dag>()
.Add(Expression.Eq("Object_id", pObjectId))
.List<Dag>().ToList();
}
NHibernate生成以下SQL查询:
exec sp_executesql N'SELECT this_. ... FROM schm.dag this_ WHERE this_.object_id = @p0',N'@p0 nvarchar(4000)',@p0=N'...'
这里的问题是对nvarchar(4000)
的CAST。hbm.xml文件将object_id
列的映射定义为:
<property name="Object_id" type="String">
<column name="object_id" not-null="false" length="40" sql-type="varchar" />
</property>
那么,为什么NHibernate忽略映射文件中的信息而不使用varchar(40)
呢?我找不到明确说明用于条件的属性类型的方法。我甚至不确定我是否需要它,映射在hbm.xml文件中,为什么NHibernate不拿起它?
这是NHibernate 4.1.4000正在运行。Net Framework 4.6(遗留应用程序(。
在映射代码中的属性时:
<property name="Object_id" type="String">
您将type
指定为String
。改为AnsiString
。
请参考NHibernate文档并搜索";表5.3。系统ValueType映射类型";在那里查看所有类型的列表。
请注意,考虑到unicode支持,在许多情况下使用NVARCHAR
(因此使用string
(是更好的方法。