2010-06-29 19 views
1

J'essaye de faire Table per subclass: using a discriminator en utilisant NHibernate.Mapping.Attributes. Le HBM devrait ressembler à ceci:Faire table par sous-classe en utilisant un discriminateur avec 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> 

Le code ressemble à ceci:

[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; 
    } 
} 

Le résultat est quelque chose comme ceci:

<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> 

Il crée la bonne structure de table (un table avec deux champs décimaux et un tableau PF/FK to Reports) mais lors de l'insertion de données, il échoue, car il génère deux insertions pour chaque champ:

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 

Existe-t-il un moyen d'obtenir ceci en utilisant NHibernate.Mapping.Attributes?

Répondre

0

Vous devez suivre la version XML à utiliser NHMA: Donc, si vous voulez un, ajoutez un seul NHMA.Join, avec deux [Immobilier (2 & 3, Name = "...")]