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

Responder a