MUCHAS GRACIAS DENNIS TE PASASTE Y SI MIRA JUSTO ESTABA VIENDO LAS DEMAS TABLAS Y VOY A TENER QUE AGREGAR CLAVES DE OTRAS ENTIDADES Y PONERLAS COMO PRIMARIAS EN OTRA ENTIDAD POR EJEMPLO TE PONGO UN CASO:
TENGO LA ENTIDAD CULTIVO EN DONDE ADEMAS DE TENER EL CAMPO CULTIVO_ID SE CONSIDERA TAMBIEN LAS CLAVES DE OTRAS ENTIDADES ( PAIS_ID, CIUDAD_ID, FUNDO_ID) ES DECIR LA CLAVE PRINCIPAL DE LA ENTIDAD CULTIVO SERIA: --> PAIS_ID, CIUDAD_ID, FUNDO_ID, CULTIVO_ID LAS LLAVES QUE VIENEN DE LAS OTRAS ENTIDADES SON ESTAS: PAIS ( PAIS_ID) CIUDAD ( PAIS_ID, CIUDAD_ID) FUNDO ( PAIS_ID, CIUDAD_ID, FUNDO_ID) OJALA ME ENTIENDAS LA IDEA Y ME ORIENTES. El 14 de junio de 2011 10:09, Dennis Alba <[email protected]> escribió: > realmente no, lo he usado en varios proyectos y funciona bien, incluso > cuando partes de la llave son a su vez llaves foraneas de otras > clases, que entonces el codigo del mapeo cambia un poco, te lo puedo > mostrar cuando lo necesites, porque es muy probable que en algun > momento lo requieras. El unico inconveniente de esta forma de mapeo de > llaves compuestas es que no he logrado ponerle el tamaño del campo que > yo deseo, Osea si se lo pongo peo en la BD no lo coge, pone el tamaño > que desee la BD. Pero por lo demas funciona bien. > Me explico referente al tamaño: > > si te fijas en el codigo que te di, en el mapeo de los campos se > especifica el tamaño que tendran en la BD los campos NOMBREANALISIS y > ESTADO(este ultimo veo que te lo repeti, esta demas porque ya esta en > la llave compuesta) > > Map(x => > x.nombreAnalisis).Column("NOMBREANALISIS").Not.Nullable().Length(15); > > como ves, a NOMBREANALISIS le dije que tendra un tamaño de 15 > caracterres en la BD, esto asi funciona perfectamente, pero cuando lo > ponemos como parte de una llave compuesta le puedes especificar todo > lo que quieras que al final en la BD no lo coge, Para especificar el > tamaño en la llave compuesta se hace como te pongo abajo: > > // Llave primaria > CompositeId().KeyProperty(x => x.IdAnalisis, c => > c.ColumnName("ID_ANALISIS").Length(8)) > .KeyProperty(x => x.Estado, c => > c.ColumnName("ESTADO").Length(10)).KeyProperty(x => x.Pasaporte, c => > c.ColumnName("PASAPORTE").Length(10)) > .KeyProperty(x => x.Sololicitud, c => > c.ColumnName("SOLICITUD").Length(15)); > > que no te lo habia puesto porque ya te digo no me funciona, pero igual > ahi lo tienes para que lo domines para que cuando funcione sepas como > usarlo. > > El 14/06/11, Anthony Campos <[email protected]> escribió: > > Muchas gracias DENNIS, es justo lo que estaba buscando, pero dime es > > recomendable hacer eso es decir no habria alguna dificultad en el > transcurso > > del desarrollo? > > > > Saludos- > > > > El 14 de junio de 2011 09:46, Dennis Alba <[email protected]> escribió: > > > >> si existe y es de la siguiente forma, supon que tienes una clase > >> Analisis con la siguiente estructura > >> > >> public partial class Analisis > >> { > >> public virtual long IdAnalisis { get; set; } > >> public virtual string nombreAnalisis { get; set; } > >> > >> //campos de la otra clase necesarios para la llave compuesta y > >> foranea > >> public virtual string Sololicitud { get; set; } > >> public virtual long Pasaje { get; set; } > >> public virtual string Estado { get; set; } > >> > >> //public virtual Proyecto proInst { get; set; } > >> > >> > >> public override int GetHashCode() > >> { > >> return this.IdAnalisis.GetHashCode() + > >> this.Sololicitud.GetHashCode() > >> + this.Pasaje.GetHashCode() + > this.Estado.GetHashCode(); > >> } > >> > >> public override bool Equals(object obj) > >> { > >> return base.Equals(obj); > >> } > >> } > >> > >> OJO los metodos GetHashCode y Equals los debes redefinir como vez, de > >> lo contrario no funcionara. > >> > >> luego hacemos el respectivo mapeo > >> > >> public class MapeoAnalisis: ClassMap<Analisis> > >> { > >> public MapeoAnalisis() > >> { > >> // nombre de la tabla > >> Table("P_ANALISIS"); > >> > >> // Llave primaria compuesta > >> CompositeId().KeyProperty(x => x.IdAnalisis, "ID_ANALISIS") > >> .KeyProperty(x => x.Estado, "ESTADO").KeyProperty(x => > >> x.Pasaje, "PASAJE") > >> .KeyProperty(x => x.Sololicitud, "SOLICITUD"); > >> > >> > >> // Campos de la tabla > >> Map(x => > >> x.nombreAnalisis).Column("NOMBREANALISIS").Not.Nullable().Length(15); > >> Map(x => > x.Estado).Column("ESTADO").Not.Nullable().Length(15); > >> > >> } > >> } > >> > >> esto es siempre que las llaves primarias este compuesto por campos > >> propios de esta clase Analisis > >> > >> El 14/06/11, Anthony Campos <[email protected]> escribió: > >> > Estimados una consulta, estoy utilizando el fluent nhibernate y > >> quisiera > >> > saber si es posible poder mapear como ID varias columnas? > >> > > >> > Si se pudiera hacer eso diganme es recomendable hacer eso? Habria > alguna > >> > implicancia en hacer ese tipo de mapeo? > >> > > >> > 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
