我正在使用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在生成的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解析器。例如。在formulas
,subselects
。