Debes mapearlo no como un many-to-many sino como un composite-element.  Con
fluent mira este ejemplo:
http://stackoverflow.com/questions/2960493/fluent-nhibernate-how-does-one-translate-composite-element-tag-to-fnh


2011/6/22 Dennis Alba <[email protected]>

> lo estoy chequeando pero el fluent no tiene como especificar mas
> campos para la tabla que se generara para establecer la relacion, lo
> mas que te deja a hacer es poner el nombre de la tabla y las llave PK
> FK del padre , pero nada mas
>
> El 22/06/11, Nestor Andres Rodriguez <[email protected]> escribió:
> > Ok,  bien.  Pero chequeaste el mapeo que te sugeri ?
> >
> > 2011/6/22 Dennis Alba <[email protected]>
> >
> >> eso mismo era mi hermano, gracias, nunca hago eso y esta vez lo hice
> >> sin percatarme. Problema resuelto
> >>
> >>
> >> El 22/06/11, Nestor Andres Rodriguez <[email protected]> escribió:
> >> > Hola Dennis.  Creeria que el inconveniente esta en que tu estas
> mapeando
> >> dos
> >> > veces las mismas propiedades.  Si haces CompositeId().KeyReference, no
> >> > es
> >> > necesario que vuelvas a hacer un "References" a la misma propiedad.
> >> >
> >> > Saludos,
> >> >
> >> > 2011/6/22 Dennis Alba <[email protected]>
> >> >
> >> >> Haber te cuento Nestor:
> >> >> 1- uso fluent Nhibernate, por tal motivo no eleve los ficheros hbm(no
> >> >> las hay) ni las clases de mapeo pues se que la mayoria del foro usa
> >> >> solo NHibernate.
> >> >> 2- en realidad las clases las cree como si fueran tablas ya que al
> >> >> menos Fluent (y creo que Nhibernate tambien)  pueden mapearte dos
> >> >> entidades cuya relacion sea m-n reandote la 3ra tabla que las
> >> >> relaciona siempre y cuando esta no tenga valores agregados, pero como
> >> >> en mi caso necesito que la tabvla que relacion a las otras dos tenga
> >> >> ademas de sus llaves P otros campos como la fecha ya el metodo que
> >> >> trae Fluent no me sirve, por tal motivo es que tube que crear las
> >> >> clases como si fueran las tablas.
> >> >> de todas formas aqui te paso las clases de mapeo:
> >> >>
> >> >>       public GrupoMap()
> >> >>       {
> >> >>           // definicionde la tabla
> >> >>           Table("P_GRUPO");
> >> >>
> >> >>           // definicion de la llave primaria de la tabla
> >> >>           Id(x => x.IdGrupo).Column("ID_GRUPO").GeneratedBy.Native();
> >> >>
> >> >>           //campos a mapear
> >> >>           Map(x =>
> x.NombGrupo).Column("GRUPO").Nullable().Length(10);
> >> >>           Map(x => x.Anno).Column("ANO").Nullable().Length(2);
> >> >>       }
> >> >>    }
> >> >>       public GrupoMap()
> >> >>       {
> >> >>           // definicionde la tabla
> >> >>           Table("P_GRUPO");
> >> >>
> >> >>           // definicion de la llave primaria de la tabla
> >> >>           Id(x => x.IdGrupo).Column("ID_GRUPO").GeneratedBy.Native();
> >> >>
> >> >>           //campos a mapear
> >> >>           Map(x =>
> x.NombGrupo).Column("GRUPO").Nullable().Length(10);
> >> >>           Map(x => x.Anno).Column("ANO").Nullable().Length(2);
> >> >>       }
> >> >>    }
> >> >>
> >> >>        public ProfesorGrupoMap()
> >> >>        {
> >> >>            // definicionde la tabla
> >> >>            Table("P_PROFESOR_GRUPO");
> >> >>
> >> >>            // definicion de la llave primaria de la tabla
> >> >>            CompositeId().KeyReference(x => x.p_Grupo, "ID_GRUPO")
> >> >>                .KeyReference(x => x.p_Profesor, "ID_PROFESOR");
> >> >>
> >> >>            //campos a mapear
> >> >>            Map(x =>
> >> >> x.Fecha).Column("FECHA").Nullable().CustomSqlType("DATETIME");
> >> >>            References(x => x.p_Profesor).Column("ID_PROFESOR");
> >> >>            References(x =>
> >> x.p_Grupo).Column("ID_GRUPO");//.Cascade.All();
> >> >>        }
> >> >>    }
> >> >> Reitero, las tablas se mapean bien e incluso puedo insertar bien los
> >> >> valores desde SQLServer, el problema esta cuando hago la inserccion a
> >> >> la tabla P_PROFESOR_GRUPO desde la aplicacion
> >> >> que crees??
> >> >>
> >> >> El 22/06/11, Nestor Andres Rodriguez <[email protected]> escribió:
> >> >> > Por favor provee los archivos de mapeo.   Otra  cosa, no has
> pensado
> >> en
> >> >> que
> >> >> > el Profesor tenga su coleccion de grupos y viceversa ?  Pareciera
> >> >> > como
> >> >> > si
> >> >> > estuvieras mapeando un sistema modelado en tablas y relaciones en
> >> lugar
> >> >> de
> >> >> > objetos.
> >> >> >
> >> >> > Saludos
> >> >> >
> >> >> > 2011/6/22 Banzai <[email protected]>
> >> >> >
> >> >> >> Saludos tropa:
> >> >> >> necesito ver si me pueden ayudar con el siguiente error que
> plantee
> >> en
> >> >> >> el titulo de este debate
> >> >> >> les pongo mi entorno completo para que puedan entender bien el
> >> >> >> problema
> >> >> >> tengo las siguientes clases:
> >> >> >>
> >> >> >>   public partial class Profesor
> >> >> >>    {
> >> >> >>       public virtual int IdProfesor { get; set; }
> >> >> >>       public virtual string NombreProfesor { get; set; }
> >> >> >>
> >> >> >>    }
> >> >> >>
> >> >> >>    public partial class Grupo
> >> >> >>    {
> >> >> >>        public virtual int IdGrupo { get; set; }
> >> >> >>        public virtual string NombGrupo { get; set; }
> >> >> >>        public virtual int Anno { get; set; }
> >> >> >>    }
> >> >> >>
> >> >> >>    public partial class ProfesorGrupo
> >> >> >>    {
> >> >> >>
> >> >> >>        public virtual Profesor p_Profesor { get; set; }
> >> >> >>
> >> >> >>        public virtual Grupo p_Grupo { get; set; }
> >> >> >>
> >> >> >>        public virtual DateTime? Fecha { get; set; }
> >> >> >>
> >> >> >>        public override int GetHashCode()
> >> >> >>        {
> >> >> >>            return p_Profesor.GetHashCode() +
> p_Grupo.GetHashCode();
> >> >> >>        }
> >> >> >>
> >> >> >>
> >> >> >>        public override bool Equals(object obj)
> >> >> >>        {
> >> >> >>            if (ReferenceEquals(null, obj)) return false;
> >> >> >>            if (ReferenceEquals(this, obj)) return true;
> >> >> >>            var other = obj as ProfesorGrupo;
> >> >> >>            if (other == null) return false;
> >> >> >>
> >> >> >>            return (p_Profesor == other.p_Profesor
> >> >> >>                   && p_Grupo == other.p_Grupo
> >> >> >>                   && Fecha == other.Fecha);
> >> >> >>        }
> >> >> >>
> >> >> >>    }
> >> >> >>
> >> >> >> cuando hago el mapeo de estas entidades me quedan tres tablas
> >> P_GRUPO,
> >> >> >> P_PROFESOR, P_PROFESOR_GRUPO, donde la ultima lo que hace no es
> mas
> >> >> >> que relacionar las dos primeras, ya que contiene sus PK como
> llaves
> >> de
> >> >> >> ella, Vamos que lo que hice fue modelar una relacion n-m entre las
> >> dos
> >> >> >> primeras (P_GRUPO y P_PROFESOR).
> >> >> >> El mapeo se realiza de manera perfecta, el problema esta cuando
> >> >> >> trato
> >> >> >> de insertar, particularmente en P_PROFESOR_GRUPO.
> >> >> >>
> >> >> >> el flujo de las inserciones es el siguiente.
> >> >> >>
> >> >> >> 1ero inserto todos los grupos, FUNCIONA BIEN
> >> >> >> 2do luego inserto a los profesores FUNCIONA BIEN
> >> >> >> 3ro luego inserto a la clase que los relaciona pasandole ya que
> esta
> >> >> >> entidad tiene un objeto de Grupo y profesor, pero cuando lo
> inserto
> >> da
> >> >> >> el siguiente error
> >> >> >>  "Índice 3 no válido para SqlParameterCollection con Count=3."
> >> >> >>
> >> >> >> alguien sabe que puede ser??
> >> >> >> Mil gracias
> >> >> >>
> >> >> >> --
> >> >> >> Para escribir al Grupo, hágalo a esta dirección:
> >> >> >> [email protected]
> >> >> >> Para más, visite:
> http://groups.google.com/group/NHibernate-Hispano
> >> >> >
> >> >> > --
> >> >> > Para escribir al Grupo, hágalo a esta dirección:
> >> >> > [email protected]
> >> >> > Para más, visite:
> http://groups.google.com/group/NHibernate-Hispano
> >> >>
> >> >> --
> >> >> Para escribir al Grupo, hágalo a esta dirección:
> >> >> [email protected]
> >> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >> >>
> >> >
> >> > --
> >> > Para escribir al Grupo, hágalo a esta dirección:
> >> > [email protected]
> >> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >>
> >> --
> >> Para escribir al Grupo, hágalo a esta dirección:
> >> [email protected]
> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
> >>
> >
> > --
> > Para escribir al Grupo, hágalo a esta dirección:
> > [email protected]
> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a