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