2010-02-02 77 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]語法。