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>
你能提供任何映射吗? – Jaguar 2010-05-28 07:59:16
通过我的映射文件查看一个简单的例子,我注意到我已经将模式指定为“dbo”。作为一般规则,当我对数据库进行操作时,我总是指定dbo。这在nHibernate中不是个好主意吗? 无论哪种方式,无论我指定哪种模式,它都应该放弃约束,不应该吗? – Kendrick 2010-05-28 17:32:23
指定模式是正确的,可能是生成的sql中有错误...如果你在'dbo'和'[FK ...'之间加一个点,或者在drop语句中添加' DBO“。对象ID之前的部分是否返回所需的结果? – Jaguar 2010-05-28 18:36:56