2010-10-14 7 views
1

J'ai les classes suivantes avec lesquelles j'ai besoin de NHibernate pour bien jouer. Comment fait-on ça?Comment utiliser NHibernate ManyToMany avec des propriétés (colonnes) sur le tableau Join (Fluent NHibernate)

public class Customer 
{ 
    public int ID { get; set; } 
    public string Name {get;set;} 
} 

public class Product 
{ 
    public int ID { get; set; } 
    public string Name {get;set;} 
} 

public class CustomerPricing 
{ 
    public int ID { get; set; } 
    public decimal Price {get;set;} 
    public Customer Customer { get; set; } 
    public Product Product {get;set;} 
    public datetime ExpiresOn { get; set; } 
    public string ApprovedBy {get;set;} 
} 

J'utilise couramment les correspondances et le HasManyToMany ne fonctionne pas pour cela (que je peux dire). Je travaille actuellement autour d'elle en utilisant un HasMany puis en faisant des requêtes LINQ dans le modèle (beurk).

Merci d'avance.

Kyle

Répondre

4

Aucune idée comment faire parler couramment, mais parce que vous stockez des données dans la table d'assemblage, vous aurez besoin d'aller plusieurs à l'un de CustomerPricing à la fois client et produit. Dans un hbm.xml, le mappage pour CustomerPricing ressemblerait

<many-to-one name="Product" column="ProductID" not-null="true" /> 
<many-to-one name="Customer" column="CustomerID" not-null="true" /> 

Ensuite, dans votre classe client (ou dans les deux, si on le souhaite) que vous souhaitez ajouter:

<set name="CustomerPricing" table="CustomerPricing" inverse="true"> 
     <key column="CustomerID"></key> 
     <one-to-many class="CustomerPricing" /> 
</set> 
1

Essayez cette

public class Customer 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public IList<Product> ProductsOwned { get; set; } 
} 

public class Product 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public IList<Customer> Owners { get; set; } 
} 

avec la cartographie des clients comme

HasManyToMany<Product>(x => x.ProductsOwned) 
.WithTableName("CustomerPricing") 
.WithParentKeyColumn("CustomerID") 
.WithChildKeyColumn("ProductID") 

et le mappage du produit en tant que

HasManyToMany<Customer>(x => x.Owners) 
.WithTableName("CustomerPricing") 
.WithParentKeyColumn("ProductID") 
.WithChildKeyColumn("CustomerID") 
Questions connexes