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

Responder a