muchas gracias por la respuesta voy a mapear y probar el funcionamiento. Gracias y cualquier otra duda te la hago llegar....
Saludos- El 15 de junio de 2011 07:42, Dennis Alba <[email protected]> escribió: > Te respondo: > 1- Sobre si se puede crear una tabla sin Id. la respuesta es no, este > es uno de los grandes defectos de NHibernate, fijate no del Fluent, > NHibernate tampoco lo hace, no se si otro ORM lo permitan pero no > NHibernate. El requiere de Id en las tablas para poder indexarlas. > > 2- Sí es necesario ese codigo y no importa que algunos de los Id sean > String, yo tambien tengo Id de tipo String y los puedo combinar > perfectamente en una llave compuesta con otros campos de otros tipo, > hasta con campos de tipo datetime, no hay problema. Funciona > perfectamente > > Saludos > > El 14/06/11, Anthony Campos <[email protected]> escribió: > > Dennis es necesario esta parte del codigo en la entidad no? > > > > 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); > > } > > > > Te digo esto por que en algunas entidades tengo como Id un tipo de dato > > varchar2 y que sepa el GetHashCode devuelve un int. > > > > Saludos > > > > > > El 14 de junio de 2011 15:40, Anthony Campos <[email protected]> > escribió: > > > >> 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 > > -- > 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
