由于 {“关键字'文件'附近的语法错误,我收不到实体错误。”}
这是我的映射文件。我假设我没有正确逃避某些事情,但我看不出是什么。我不认为这是我的 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”的做法。我想我应该使用刻度字符(`),但我似乎无法做到这一点。
答案 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]”语法。