2010-06-29 29 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 = “...”)]