2010-10-26 2 views
3

J'ai une relation plusieurs-à-plusieurs existante dans SQL qui est mappée à mes entités commerciales via NHibernate.NHibernate many-to-many - comment récupérer une propriété de la table de jointure et l'associer à un enfant?

Je souhaite ajouter une propriété à l'enfant (Catégorie ci-dessous) qui s'applique uniquement à la relation entre le parent et l'enfant. En SQL, j'ajouterais un champ à la table de jointure. Comment utiliser NHibernate pour extraire cette valeur de la table de jointure et l'associer à la propriété d'un enfant?

Comment utiliser NHibernate pour extraire cette valeur de la table de jointure et l'associer à la propriété d'un enfant?

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    namespace="MyProject.Core.Entities" 
    assembly="MyProject.Core"> 

    <class name="Product" table="Products" lazy="false"> 

    <id name="ProductId" access="field"> 
     <generator class="native" /> 
    </id> 

    <property name="ProductName" access="field" /> 

    <idbag name="Categories" table="ProductCategory"> 
     <collection-id column="ProductCategoryId" type="int"> 
     <generator class="native" />     
     </collection-id> 
     <key column="ProductId" /> 
     <many-to-many column="CategoryId" class="Category" /> 
    </idbag> 

    </class> 
</hibernate-mapping> 

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    namespace="MyProject.Core.Entities" 
    assembly="MyProject.Core"> 

    <class name="Category" table="Categories" lazy="false"> 

    <id name="CategoryId" access="field"> 
     <generator class="native" /> 
    </id> 

    <property name="CategoryName" access="field" /> 

    </class> 
</hibernate-mapping> 

Répondre

2

La réponse de base est que vous devez déclarer votre table de jointure et créer une classe pour elle. Une question similaire se trouve ici:

How to use NHibernate ManyToMany with properties (columns) on Join Table (Fluent NHibernate)

Précisions en fonction des commentaires:

Product one-to-many ProductCategory 
Category one-to-many ProductCategory 
ProductCategory many-to-one Product 
ProductCategory many-to-one Category 
+0

Alors je commence à voir une tendance. Est-il sûr de dire qu'en ajoutant des données à ma relation plusieurs-à-plusieurs, j'ai maintenant un un-à-plusieurs du parent à la relation et un un-à-un de la relation à l'enfant? La relation est-elle une nouvelle entité comme suggéré dans http://stackoverflow.com/questions/2713329/nhibernate-many-to-many-relationship-with-field-in-the-relationship-table? – Mayo

+0

La relation est une nouvelle entité. Le plusieurs-à-plusieurs dans NHibernate est essentiellement un raccourci qui vous permet d'ignorer cette étape lorsque vous n'incluez aucune donnée supplémentaire dans le lien. Votre compréhension des relations est correcte (je les ai ajoutées à la réponse). – Kendrick

+0

Eh bien, ça a demandé un peu d'effort mais ça marche maintenant. Je suis reconnaissant pour le couplage lâche et les tests unitaires. Merci pour la poussée dans la bonne direction. – Mayo

Questions connexes