2010-11-10 24 views
3

J'utilise IQueryable > pour créer des requêtes de traitement par lots. J'ai utilisé les vues avec succès pour extraire des informations afin que le IQueryable < puisse le trouver, mais dans ce cas, je ne peux pas déterminer comment mapper une vue, car cela dépend des propriétés plutôt que de l'ID de l'entité.NHibernate mappage à l'entité à l'aide de propriétés communes

Dire que j'ai cette entité et la cartographie:

public class Calculation 
{ 
    public virtual int Id { get; set; } 
    public virtual Organisation Organisation { get; set; } 
    public virtual Charge Charge { get; set; } 
    public virtual TransactionTotal TransactionTotal { get; set; } 
} 

public class CalculationMap : ClassMap<Calculation> 
{ 
    public CalculationMap() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     References(x => x.Organisation).Not.Nullable().UniqueKey("OC"); 
     References(x => x.Charge).Not.Nullable().UniqueKey("OC"); 
    } 

Ceci est la classe que je dois obtenir là-bas: J'utilise en vue de me donner le montant total par l'organisation et de charge:

public class TransactionTotal 
{ 
    public virtual int Id { get; set; } 
    public virtual Organisation Organisation { get; set; } 
    public virtual Charge Charge { get; set; } 
    public virtual decimal Amount { get; set; }   
} 

public class TransactionTotalMap : ClassMap<TransactionTotal> 
{ 
    public TransactionTotalMap() 
    { 
     Id(x => x.Id).GeneratedBy.Identity(); 
     Table("TransactionTotalsView"); 
     References(x => x.Charge).Not.Nullable(); 
     References(x => x.Organisation).Not.Nullable(); 
     Map(x => x.Amount).Precision(15).Scale(2).Not.Nullable(); 
    } 
} 

Autres endroits J'ai utilisé des vues J'ai utilisé avec succès des mappages comme HasOne(x => x.TransactionTotal); mais dans ce cas je dois dire à Nhibernate d'utiliser les propriétés Organization et Charge comme clé.

Est-ce encore possible? Si oui, comment mapper la classe TransactionTotal à la classe Calculation?

Edit: J'ai utilisé CompositeId dans TransactionTotalMap comme suggéré par @ David:

CompositeId().KeyProperty(x => x.Organisation.Id).KeyProperty(x => x.Charge.Id); 

Je suis toujours bloqué sur ce qu'il faut mettre dans le CalculationMap bien.

Répondre

1

utilisez la méthode CompositeId() dans votre mappage

+0

Merci. Savez-vous ce que je devrais mettre dans la CalculationMap pour correspondre à cela? – stuartd

+0

Qu'est-ce que c'est en ce moment? –

+0

Rien encore .. :( – stuartd