这个NHibernate映射文件有什么问题?

时间:2010-02-02 14:41:58

标签: nhibernate nhibernate-mapping

由于 {“关键字'文件'附近的语法错误,我收不到实体错误。”}

这是我的映射文件。我假设我没有正确逃避某些事情,但我看不出是什么。我不认为这是我的 PreApplication.File 表名。在此先感谢!!

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model.PreApplication">
  <class name="File" table="PreApplication.File">

    <id name="ID" column="ID" type="Int32" unsaved-value="0">
      <generator class="native" />
    </id>

    <property name="DateUploaded" column="DateUploaded" type="DateTime" not-null="true" />
    <property name="FileName" column="`FileName`" type="String" not-null="true" />
    <property name="OriginalFileName" column="OriginalFileName" type="String" not-null="true" />
    <property name="ContentType" column="ContentType" type="String" not-null="true" />

  </class>
</hibernate-mapping>

修改: 使用提供的建议,我发现他们的问题是由我的表名为File引起的。如果我将表属性更改为“PreApplication。[File]”它可以正常工作,但我不认为这是“NHibernate”的做法。我想我应该使用刻度字符(`),但我似乎无法做到这一点。

3 个答案:

答案 0 :(得分:3)

我找到了解决这个问题的正确方法。我找到了schema属性,并按如下方式更改了它:

<class name="File" schema="PreApplication" table="`File`">

这样就可以正确地转义File表名而无需硬编码[]。感谢大家的帮助!

答案 1 :(得分:2)

您是否可以使用剖析器拦截发送到数据库的SQL语句,或者将NHibernate的show_sql配置属性设置为true,以便我们可以看到执行的实际SQL语句?

答案 2 :(得分:0)

“File”是T-SQL中的保留关键字(参见http://msdn.microsoft.com/en-us/library/ms189822.aspx)。您不应将其用作表名。您可以在SQL Server的查询工具中对此进行测试:

select * from File

......你会得到同样的错误:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'File'.

如果无法更改名称,则必须更改表格名称或使用“[File]”语法。