Я новичок в 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>