nHibernate 4.1.4没有引用与保留关键字匹配的表名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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错误,表示无效的表名User无效。 nHibernate无法将其包装在括号中。

有任何想法吗?

答案

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

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

5.3. SQL quoted identifiers

您可以强制NHibernate在生成的SQL中引用标识符,方法是将表或列名称封装在映射文档的反向标记中。 NHibernate将使用SQL Dialect的正确引用样式(通常是双引号,但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解析器。例如。在formulassubselects

以上是关于nHibernate 4.1.4没有引用与保留关键字匹配的表名的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate 中的自引用实体给对象引用一个未保存的瞬态实例异常

是否可以直接在 NHibernate 中设置引用的外键?

java有没有goto?保留字与关键字

NHibernate HQL 是不是支持 UNION ALL 关键字?

NHibernate,如何解决依赖于其他列的映射

NHibernate - 获取引用的列值