首页 > 解决方案 > nHibernate 4.1.4 没有引用与保留关键字匹配的表名

问题描述

我正在使用 nHibernate 4.1.4 MappingByCode。我的方言是

public class Dialect : NHibernate.Dialect.MsSql2012Dialect
{
    protected override void RegisterKeywords()
    {
        base.RegisterKeywords();
        RegisterKeyword("user");
    }
}

我的配置是设置 config.SetProperty(Environment.Hbm2ddlKeyWords, "keywords");

我有一个名为 User 的表。

抛出 SQL 错误,无效的表名用户无效。nHibernate 无法将其包裹在括号中。

有任何想法吗?

标签: nhibernatenhibernate-mapping

解决方案


关键字用于不同的目的...

我们需要的是临时表名转义

5.3. SQL 引用标识符

您可以强制 NHibernate 在生成的 SQL 中引用标识符,方法是在映射文档中将表或列名括在反引号中。NHibernate 将为 SQL 方言使用正确的引号样式(通常是双引号,但 SQL Server 使用括号,MySQL 使用反引号)。

<class name="LineItem" table="`Line Item`">
    <id name="Id" column="`Item Id`"/><generator class="assigned"/></id>
    <property name="ItemNumber" column="`Item #`"/>
    ...
</class>

即在映射中,我们需要对表名进行转义:

"`user`"

在方言配置中定义的关键字将在使用自定义sql语句时帮助 NH 解析器。例如在formulas, subselects.


推荐阅读