Почему NHibernate генерирует схему с именем класса в виде столбца? - PullRequest
0 голосов
/ 29 ноября 2010

Я пытаюсь сгенерировать свою базу данных из классов, используя NHibernate, но создаваемая схема содержит столбец для класса.По большей части это не имеет значения, но один конкретный класс вызывает сбой ... мой класс Order (потому что order - это зарезервированное ключевое слово в SQL - да, возможно, мне следовало использовать слово, которое не было ключевым словом, ноэто еще одна проблема)

Следующий файл сопоставления:

<?xml version="1.0" encoding="utf-8" ?>

<class name="Order" table="Orders">
    <id name="_persistenceID" column="ID" type="Guid" access="field" unsaved-value="00000000-0000-0000-0000-000000000000">
        <generator class="guid.comb" />
    </id>
    <version name="_persistenceVersion" column="Version" access="field" type="int" unsaved-value="0" />

    <property name="DateDeleted" column="DateDeleted" type="DateTime" />
    <property name="ChangeReason" column="ChangeReason" type="String" not-null="true" />
    <property name="CompletedDate" column="CompletedDate" type="DateTime" />
    <property name="IsDeleted" column="IsDeleted" type="Boolean" />
    <property name="Notes" column="Notes" type="String" />
    <property name="OrderDate" column="OrderDate" type="DateTime" not-null="true" />
    <property name="OrderTotal" column="OrderTotal" type="Decimal" />
    <property name="RequiredDate" column="RequiredDate" type="DateTime" />

    <many-to-one name="Customer" column="Customer" class="Customer" not-null="true" />

    <bag name="OrderDetails" table="OrderDetails" generic="true" cascade="all">
        <key column="OrderDetail" foreign-key="FK_OrderOrderDetails" />
        <one-to-many class="OrderDetail" />
    </bag>

</class>

создает следующий SQL:

    create table Orders (
  ID UNIQUEIDENTIFIER not null,
   Version INT not null,
   DateDeleted DATETIME null,
   ChangeReason NVARCHAR(255) not null,
   CompletedDate DATETIME null,
   IsDeleted BIT null,
   Notes NVARCHAR(255) null,
   OrderDate DATETIME not null,
   OrderTotal DECIMAL(19,5) null,
   RequiredDate DATETIME null,
   Customer UNIQUEIDENTIFIER not null,
   Order UNIQUEIDENTIFIER null,
   primary key (ID)
)

Именно этот столбец со второго по последний (ордер) делает его недействительным и высвечивает проблему.Это происходит на всех других моих уроках - но я не знаю почему.Что я могу с этим поделать?

Редактировать: 30/11/2010 - Другой конец файла сопоставления:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="TheWorkshop.DomainModel" namespace="TheWorkshop.DomainModel" default-access="field.camelcase-underscore" default-lazy="true">

<class name="OrderDetail" table="OrderDetails">
    <id name="_persistenceID" column="ID" type="Guid" access="field" unsaved-value="00000000-0000-0000-0000-000000000000">
        <generator class="guid.comb" />
    </id>
    <version name="_persistenceVersion" column="Version" access="field" type="int" unsaved-value="0" />

    <property name="AdjustedPrice" column="AdjustedPrice" type="Decimal" not-null="true" />
    <property name="LineCost" column="LineCost" type="Decimal" not-null="true" />
    <property name="Notes" column="Notes" type="String" />
    <property name="Photo" column="Photo" type="String" />
    <property name="Price" column="Price" type="Decimal" not-null="true" />
    <property name="Quantity" column="Quantity" type="int" />

    <many-to-one name="`Order`" column="`Order`" class="Order" not-null="true" />
    <many-to-one name="Product" column="Product" class="Product" not-null="true" />

</class>

, который генерирует следующее:

create table OrderDetails (
ID UNIQUEIDENTIFIER not null,
Version INT not null,
AdjustedPrice DECIMAL(19,5) not null,
LineCost DECIMAL(19,5) not null,
Notes NVARCHAR(255) null,
Photo NVARCHAR(255) null,
Price DECIMAL(19,5) not null,
Quantity INT null,
[Order] UNIQUEIDENTIFIER not null,
Product UNIQUEIDENTIFIER not null,
primary key (ID)
)

1 Ответ

0 голосов
/ 30 ноября 2010

Я думаю, что проблема в том, что ключевой столбец установлен в OrderDetail.Атрибут column должен содержать имя столбца внешнего ключа из таблицы Order в OrderDetail, и я сомневаюсь, что вы назвали этот столбец OrderDetail.Я предполагаю, что это должен быть OrderID.Это может быть ошибка в генерации схемы, которая возникает, когда вместо имени столбца указывается имя класса.

<key column="OrderDetail" foreign-key="FK_OrderOrderDetails" />
...