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

问题描述 投票:1回答:1

我正在使用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无法将其包装在括号中。

有任何想法吗?

nhibernate nhibernate-mapping
1个回答
1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.