Una consulta o duda que tengo, diganme es posible poder crear una entidad y mapearla pero sin tener que indicarle un PK? Lo que sucede es que tengo una entidad que que se llama PR_Fundo_Sala y en ella se van a grabar los Pk de otras entidades pero esta entidad no tiene un PK.
Es posible eso? -Saludos- El 14 de junio de 2011 13:07, Dennis Alba <[email protected]> escribió: > podrias hacerlo de forma tal que la clase cultivo tenga instancias de > las otras clases que mecionas > > public partial class Pais > { > public virtual long IdPais { get; set; } > public virtual string nombrePais { get; set; } > ... > } > > public partial class Ciudad > { > public virtual long IdCiudad { get; set; } > public virtual string nombreCiudad { get; set; } > ... > } > > public partial class Fundo > { > public virtual long IdFundo { get; set; } > public virtual string nombreFundo { get; set; } > ... > } > > public partial class Cultivo > { > public virtual long IdCultivo { get; set; } > public virtual string nombreCultivo { get; set; } > > //campos de la otra clase necesarios para la llave compuesta y > foranea > public virtual Fundo instFundo{ get; set; } > public virtual Ciudad instCiudad{ get; set; } > public virtual Pais instPais{ get; set; } > > public override int GetHashCode() > { > return this.IdCultivo .GetHashCode() + > this.instFundo.GetHashCode() > + this.instCiudad.GetHashCode() + > this.instPais.GetHashCode(); > } > > public override bool Equals(object obj) > { > return base.Equals(obj); > } > } > > y el mapeo de esta ultima clase seria > > public class MapeoCultivo: ClassMap<Cultivo> > { > public MapeoCultivo() > { > // nombre de la tabla > Table("P_CULTIVO"); > > // Llave primaria compuesta > CompositeId().KeyProperty(x => x.IdCultivo , "CULTIVO_ID") > .KeyReferences(x => x.instFundo, "FUNDO_ID") > .KeyReferences(x => x.instCiudad, > "CIUDAD_ID") > .KeyReferences(x => x.instPais, "PAIS_ID"); > > > // Campos de la tabla > Map(x => > x.nombreCultivo ).Column("NOMBCULTIVO").Not.Nullable().Length(15); > > } > } > > El ejemplo que te acabo de poner es en el caso de que la clase cultivo > tenga instancias de las otras clases, aqui podras ver en el mapeo como > en los campos que hacen referencia a otras clases en vez de poner > KeyProperty esta KeyReferences, esa es la forma > > > El 14/06/11, Anthony Campos <[email protected]> escribió: > > 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 > > -- > 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
