2010-02-02 76 views
0

我得到一个无法加载,因为实体错误{“附近关键字‘文件’的语法不正确。”}这个NHibernate映射文件有什么问题?

这是我的映射文件。我假设我没有正确地逃避某些事情,但我没有看到什么。我不认为这是我的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> 

编辑: 使用提供的建议,我发现他们的问题是由我的表被称为文件引起的。如果我将表格属性更改为“PreApplication。[File]”,它可以正常工作,但我认为这不是“NHibernate”的方式。我想我应该使用滴答字符(`),但我似乎无法完成这项工作。

回答

3

我找到了解决这个问题的正确方法。我发现架构属性并将其更改如下:

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

这正确地转义文件表名称而不必硬编码[]。感谢大家的帮助!

2

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

+0

感谢您的建议!我得到了隧道视野,并没有想到这一点。咄! – 2010-02-02 15:24:29

0

“文件”是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]语法。