我刚刚从2.0升级到NHibernate 2.1并且没有更改我的架构现在我收到了错误:
Column 'Reserved Word' does not belong to table ReservedWords.
尝试.OpenSession()
。
我可以添加属性:
<property name="hbm2ddl.keywords">none</property>
到hibernate.cfg.xml
文件,“修复”错误。
但是,了解升级时出现此错误的原因以及解决方法可能会有所帮助。
答案 0 :(得分:1)
取自http://fabiomaulo.blogspot.com/2009/06/auto-quote-tablecolumn-names.html
NHibernate添加了自动引用作为所选数据库的保留字的表名和列名的功能。
例如,如果您有一个具有属性&#34; Order&#34;的类,如果您尝试执行:SELECT Order FROM MyTable,则大多数数据库将无法解析查询。在MSSQL中,您必须执行SELECT [Order] FROM MyTable才能使其工作(因此引用字段)。
通常在NHibernate中你可以使用`backticks`引用字段 - 即。在您的映射中,将订单列指定为Order
,然后允许您使用名为Order的列。
NHibernate的更改允许自动引用需要引用的字段,因此您不需要手动添加引号。
取自该网址,例如映射:
<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>
无需引用任何表名或列名即可正常工作