2008-11-25 8 views
5

Tengo una base de datos heredada y estoy intentando crear NHibernate DAL. Tengo un problema con un mapeo en la tabla Muchos a Muchos.NHibernate Many-to-many

las tablas de base:

  • studio_Subscribers
  • studio_Groups (contiene un IList de suscriptores)
  • studio_Subscribers_Groups - Muchos-A-Muchos mesa con claves primarias

El problema es cuando Creo una instancia de SubscriberGroup y la lleno con suscriptores que se guardan en la tabla studio_Subscribers, pero no t a la tabla Muchos a Muchos.

No puedo entender cuál es incorrecto?

studio_Subscribers mapeo de la tabla:

<?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> 

studio_Groups mapeo de la tabla:

<?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> 

Respuesta

2

¿No deberías tener una bolsa correspondiente en el aswell de suscriptores con una relación de muchos a muchos para el grupo ?

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

y tal vez tienen una cascada = "salvar-actualización" en su colección SubscriberItems por lo que el ahorro del Grupo actualizará sus hijos con la relación apropiada "del otro lado".

+0

jishi: Me salvaste. Gracias. Para el resto: asegúrese de que ambas clases se refieran entre sí, defina las dos bolsas en cada lado (asegúrese de que una sea inversa, una no). Y no se olvide de establecer las referencias durante runtinme: a.bList.Add (b); b.aList.Add (a); – Nils