1

サブクラスごとにテーブルを実行しようとしています: 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>

正しいテーブル構造 (2 つの 10 進数フィールドと 1 つの PF/FK to Reports テーブルを含む 1 つのテーブル) を作成しますが、データを挿入するときに失敗します。これは、各フィールドに対して 2 つの挿入が生成されるためです。

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 を使用してこれを行う方法はありますか?

4

1 に答える 1

0

NHMA を使用するには、XML バージョンに従う必要があります。したがって、必要な場合は、NHMA.Join を 1 つだけ追加し、[Property(2 & 3, Name="...")] を 2 つ追加します。

于 2010-12-06T20:02:04.607 に答える