2010-05-27 73 views
0

我是新來的NHibernate,所以這可能是我的錯,但是當我使用:NHibernate的不下降外鍵約束

schema.Create(true, true); 

我得到:

SchemaExport [(null)]- There is already an object named 'XXX' in the database. 
System.Data.SqlClient.SqlException: There is already an object 
named 'XXX' in the database. 

我抓住的SQL代碼nHibernate使用,直接從MSSMS運行,並收到類似的錯誤。看着它,生成的代碼沒有正確地刪除外鍵約束。落看起來是這樣的:

if exists (select 1 from sysobjects where id = OBJECT_ID(N'dbo[FK22212EAFBFE4C58]') 
AND parent_obj = OBJECT_ID('YYY')) 
alter table dbo.YYY drop constraint FK22212EAFBFE4C58 

做一個 「選擇OBJECT_ID(N'dbo [FK22212EAFBFE4C58]')」 我得到空。如果我取出「dbo」(即「選擇OBJECT_ID(N'[FK22212EAFBFE4C58]')」),則返回ID。

所以,我的問題是,爲什麼NHibernate的加入DBO,爲什麼不阻止被返回的對象(因爲表擁有的約束是dbo.XXX)

我的一個映射文件:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-mapping namespace="CanineApp.Model" assembly="CanineApp.Model" xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="MedicalLog" table="MedicalLog" schema="dbo"> 
    <id name="MedicalLogID" type="Int64"> 
     <generator class="identity" /> 
    </id> 
    <property name="InvoiceAmount" type="Decimal" not-null="true" /> 
    ... 
    <many-to-one name="Canine" class="Canine" column="CanineID" not-null="true" fetch="join" /> 
    <many-to-one name="TreatmentCategory" class="TreatmentCategory" column="TreatmentCategoryID" not-null="true" access="field.camelcase-underscore" /> 
    </class> 
</hibernate-mapping> 
+0

你能提供任何映射嗎? – Jaguar 2010-05-28 07:59:16

+0

通過我的映射文件查看一個簡單的例子,我注意到我已經將模式指定爲「dbo」。作爲一般規則,當我對數據庫進行操作時,我總是指定dbo。這在nHibernate中不是個好主意嗎? 無論哪種方式,無論我指定哪種模式,它都應該放棄約束,不應該嗎? – Kendrick 2010-05-28 17:32:23

+1

指定模式是正確的,可能是生成的sql中有錯誤...如果你在'dbo'和'[FK ...'之間加一個點,或者在drop語句中添加' DBO「。對象ID之前的部分是否返回所需的結果? – Jaguar 2010-05-28 18:36:56

回答

0

答:。 這可能是一個錯誤。有一個準確的issue for SQL Server 2005條目。它似乎沒有被標記爲SQL 2000,所以我會創建一個錯誤報告或修復它。