为什么NHibernate使用NVARCHAR而不是VARCHAR忽略列类型映射



当我运行以下代码时:

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(是更好的方法。

相关内容

  • 没有找到相关文章

最新更新