Я пытаюсь сделать Таблица для подкласса: с использованием дискриминатора с использованием 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?