Выполнение таблицы для каждого подкласса с использованием дискриминатора с NHibernate.Mapping.Attributes - PullRequest
1 голос
/ 29 июня 2010

Я пытаюсь сделать Таблица для подкласса: с использованием дискриминатора с использованием NHibernate.Mapping.Attributes. HBM должен выглядеть так:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <subclass name="SalesReport" discriminator-value="SalesReport" extends="Report">
    <join table="SalesReport">
      <key foreign-key="FK_SalesReport_Document" />
      <property name="TotalSales" />
      <property name="NetGrouth" />
    </join>
  </subclass>
</hibernate-mapping>

Код выглядит так:

[Subclass(NameType=typeof(SalesReport),
    DiscriminatorValueObject=DocumentDiscriminator.SalesReport,
    ExtendsType=typeof(Report))]
[Serializable]
public partial class SalesReport : Common.Documents.Report
{
    [Join(Table = "SalesReport")]
    [Key(1, ForeignKey = "FK_SalesReport_Document")]
    [Property(2)]
    public virtual decimal TotalSales
    {
        get;
        set;
    }

    [Join(Table = "SalesReport")]
    [Key(1, ForeignKey = "FK_SalesReport_Document")]
    [Property(2)]
    public virtual decimal NetGrouth
    {
        get;
        set;
    }
}

Результат примерно такой:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <subclass name="SalesReport" discriminator-value="SalesReport" extends="Report">
    <join table="SalesReport">
      <key foreign-key="FK_SalesReport_Document" />
      <property name="TotalSales" />
    </join>
    <join table="SalesReport">
      <key foreign-key="FK_SalesReport_Document" />
      <property name="TotalSales" />
      <property name="NetGrouth" />
    </join>
  </subclass>
</hibernate-mapping>

Создает правильную структуру таблицы (одна таблица с двумя десятичными полями и одна таблица PF / FK to Reports), но при вставке данных происходит сбой, поскольку генерирует две вставки для каждого поля:

NHibernate: INSERT INTO SalesReport (TotalSales, SalesReport) VALUES (@p0, @p1);@p0 = 13400,20, @p1 = 41
NHibernate: INSERT INTO SalesReport (NetGrouth, SalesReport) VALUES (@p0, @p1);@p0 = 0, @p1 = 41

Есть ли способ сделать это с помощью NHibernate.Mapping.Attributes?

1 Ответ

0 голосов
/ 06 декабря 2010

Вы должны следовать XML-версии, чтобы использовать NHMA: Итак, если вы хотите одну, добавьте только одну NHMA.Join с двумя [Property (2 & 3, Name = "...")]

...