2010-06-09 3 views
1

Prenons un exemple qui est fourni sur le site Fluent NHibernate, je dois prolonger légèrement:Fluent nHibernate - Comment mapper une colonne non-clé sur une table de jonction?

alt text http://wiki.fluentnhibernate.org/images/2/24/FirstProjectSchema.png

je besoin d'ajouter une colonne « Quantité » à la table de StoreProduct. Comment est-ce que je pourrais mapper ceci en utilisant nHibernate?

Un exemple de mapping est prévu pour le scénario donné ci-dessus, mais je ne sais pas comment je recevrais la colonne Quantité à la carte à une propriété sur la classe du produit:

public class StoreMap : ClassMap<Store> 
{ 
    public StoreMap() 
    { 
    Id(x => x.Id); 
    Map(x => x.Name); 
    HasMany(x => x.Employee) 
     .Inverse() 
     .Cascade.All(); 
    HasManyToMany(x => x.Products) 
    .Cascade.All() 
    .Table("StoreProduct"); 
    } 
} 

Répondre

1

Une suggestion serait de n'utilise pas le mappage hasManyToMany et possède une classe de mappage distincte pour StoreProduct qui est une sous-classe de Product.

nouveau magasin Mapping

public class StoreMap : ClassMap<Store> 
{ 
    public StoreMap() 
    { 
    Id(x => x.Id); 
    Map(x => x.Name); 
    HasMany(x => x.Employee) 
     .Inverse() 
     .Cascade.All(); 
    HasMany(x => x.Products) 
    .Cascade.All(); 
    } 
} 

NB a changé HasManyToMany à la place hasMany.

Nouvelle cartographie sous classe pour magasin Produit

public class StoreProductMap : SubclassMap<StoreProduct> 
{ 
    References(x=>x.Store); 

    Map(x=>x.Quantity); 
} 

entité New StoreProduct

public class StoreProduct : Product 
{ 
    public virtual Store Store {get;set;} 
    public virtual int Quantity {get;set;} 
} 

espoir qui aide.

Questions connexes