2010-06-29 69 views
1

我正在嘗試使用NHibernate.Mapping.Attributes做Table per subclass: using a discriminator。 HBM的應該是這樣的:使用NHibernate.Mapping.Attributes的鑑別器做每個子類的表

<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來報告表),但是當數據失效時它失效,因爲它爲每個字段生成兩個插入:

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完成這項工作?

回答

0

您應該按照使用NHMA XML版本: 所以,如果你想要一個,只添加一個NHMA.Join,以兩個屬性(2 & 3,NAME = 「...」)]