NHibernate:"列'保留字'不属于表的ReservedWords." 错误

Chr*_*isP 7 nhibernate

我刚刚从2.0升级到NHibernate 2.1并且没有更改我的架构现在我收到错误:

Column 'Reserved Word' does not belong to table ReservedWords.

在尝试时.OpenSession().

我可以添加属性:

<property name="hbm2ddl.keywords">none</property>
Run Code Online (Sandbox Code Playgroud)

hibernate.cfg.xml文件,"修复"错误.

但是,了解为什么升级时出现此错误以及如何解决此问题会很有帮助.

Mar*_*nst 1

摘自http://fabiomaulo.blogspot.com/2009/06/auto-quote-tablecolumn-names.html

NHibernate 添加了自动引用表名和列名的功能,这些名称是所选数据库的保留字。

例如,如果您有一个具有“Order”属性的类,如果您尝试执行: SELECT Order FROM MyTable ,那么大多数数据库将无法解析查询。在 MSSQL 中,您必须执行 SELECT [Order] FROM MyTable 才能使其正常工作(因此需要引用字段)。

一般来说,在 NHibernate 中,您可以使用“反引号”来引用字段 - 即。在您的映射中指定 Order 列,这样Order您就可以使用名为 Order 的列。

NHibernate中的改变使得需要引用的字段可以被自动引用,这样你就不需要手动添加引号了。

取自该 url,例如映射:

<class name="Order">
   <id type="int">
        <generator class="native"/>
   </id>
   <property name="Select"/>
   <property name="From"/>
   <property name="And"/>
   <property name="Column"/>
   <property name="Name"/>
</class>
Run Code Online (Sandbox Code Playgroud)

无需引用任何表名或列名即可工作