NHibernate не отбрасывает ограничения внешнего ключа - PullRequest
0 голосов
/ 27 мая 2010

Я новичок в 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]')"), то идентификатор будет возвращен.

Итак, мой вопрос: почему 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>

1 Ответ

0 голосов
/ 31 мая 2010

Ответ:. Это, наверное, ошибка. Для этой проблемы существует запись для SQL Server 2005 . Похоже, он не помечен для SQL 2000, поэтому я либо создам отчет об ошибке, либо исправлю его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...