2008-11-25 8 views
5

J'ai une base de données héritée et j'essaye de créer un DAL NHibernate. J'ai un problème avec un mappage sur la table Many-To-Many.NHibernate Many-to-many

Les tables de base de données:

  • studio_Subscribers
  • studio_Groups (contient un IList des abonnés)
  • studio_Subscribers_Groups - Many-to-Many table avec les clés primaires

Le problème est quand Je crée une instance SubscriberGroup et le remplir avec les abonnés, ils sont enregistrés dans la table studio_Subscribers, mais pas t à la table Many-To-Many.

Je n'arrive pas à comprendre ce qui ne va pas?

mapping table studio_Subscribers:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    assembly="Meridix.Studio.Common" 
    namespace="Meridix.Studio.Common"> 
    <class name="SubscriberItem" table="studio_Subscribers"> 
     <id name="StorageId" column="Id" unsaved-value="0" access="nosetter.camelcase"> 
      <generator class="identity" /> 
     </id> 
     <property name="Id" column="DomainId" not-null="true" /> 
     <property name="Subscriber" column="Subscriber" not-null="true" length="50" /> 
     <property name="Description" column="Description" not-null="false" length="100" /> 
     <property name="Type" column="Type" not-null="true" length="40" 
      type="Meridix.Studio.Data.Repositories.EnumStringTypes.SubscriberTypeEst, Meridix.Studio.Data.Repositories" /> 
    </class> 
</hibernate-mapping> 

mapping table studio_Groups:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    assembly="Meridix.Studio.Common" 
    namespace="Meridix.Studio.Common"> 
    <class name="SubscriberGroup" table="studio_Groups"> 
     <id name="StorageId" column="Id" unsaved-value="0" access="nosetter.camelcase"> 
      <generator class="identity" /> 
     </id> 
     <property name="Id" column="DomainId" not-null="true" /> 
     <property name="Name" column="Name" not-null="true" length="200" /> 
     <property name="Description" column="Description" not-null="false" length="300" /> 

     <bag name="Subscribers" table="studio_Groups_Subscribers" access="nosetter.camelcase"> 
      <key column="GroupId"></key> 
      <many-to-many column="SubscriberId" class="SubscriberItem" /> 
     </bag> 
    </class> 
</hibernate-mapping> 

Répondre

2

Si vous avez pas un sac approprié sur votre aswell abonné avec un grand nombre à plusieurs par rapport au groupe ?

<bag name="Groups" table="studio_Groups_Subscribers" access="nosetter.camelcase"> 
     <key column="SubscriberId"></key> 
     <many-to-many column="GroupId" class="GroupItem" /> 
</bag> 

et peut-être ont une cascade = « save-update » sur votre collection SubscriberItems afin que sauver le Groupe mettra à jour vos enfants avec la relation appropriée de « l'autre côté ».

+0

jishi: Vous m'avez sauvé. Merci. Pour le reste: Assurez-vous que vous avez les deux classes se référant les uns aux autres, définissez les deux sacs de chaque côté (assurez-vous que l'un est inverse, l'autre ne l'est pas). Et n'oubliez pas de définir les références pendant runtinme: a.bList.Add (b); b.aListe.Ajouter (a); – Nils