Y para que utilizas ClaseElemento1 y ClaseElemento2?  No te serviria
simplemente elemento.GetType() y de esta manera ya puedes saber que elemento
esta en la colleccion de ElementosRelacionados ?
Si es asi el mapeo seria en la clase base un many-to-many si quieres con un
IdBag (lo cual haria que tuvieras un id en la tabla "Relaciones") entre
elemento y ElementosRelacionadospero con un table-per-union-subclass para
que mapees en un solo lugar la relacion de los ElementosRelacionados ademas
te permitira tener cada clase en tablas independientes.

Saludos,
Nestor Rodriguez

2010/12/13 tolemaC <[email protected]>

> Hola gente,
>
> Me ha surgido algún que otro problema a la hora de mapear las
> entidades de un dominio, no se por donde cogerlo y necesito ideas.
>
> En mi dominio manejo dos tipos de entidades, las que llamo Entidades
> por que tienen un Id y una versión y otras entidades de más peso que
> heredan de entidad pero también tienen nombre, descripción y un flag
> de activación/desactivación. A estas últimas las he llamado
> "Elementos", en código son esto:
>
>    public class Entidad
>    {
>        public virtual int Id { get; set; }
>        public virtual int Version { get; set; }
>    }
>
>    public class Elemento : Entidad
>    {
>        public virtual string Nombre { get; set; }
>        public virtual string Descripcion { get; set; }
>        public virtual bool Desactivado { get; set; }
>        public virtual IList<Elemento> ElementosRelacionados { get;
> set; }
>    }
>
> La clase Elemento también tiene una lista de otros elementos que
> están, por algún motivo, relacionados en él mismo.
>
> Bien, todas las entidades de mi dominio heredan de entidad o elemento,
> como ejemplo tengo entidades llamadas, Persona, Tarea, Documento y
> Ejecutor, este es el diagrama de clases que forman:
>
> http://jros.org/files/orm/elementos.png
>
> Como podéis ver Persona, Ejecutor, Tarea y Documento heredan directa o
> indirectamente de Elemento.
> Para el caso quiero usar table-per-concrete-class para mapear mis
> entidades, y el problema me viene en que no se como mapear la
> propiedad "ElementosRelacionados" para cada una de las clases
> concretas.
>
> Pensándolo un poco mi idea es usar una tabla llamada "Relaciones"
> donde relacionar las entidades, teniendo como campos "ClaseElemento1",
> "ClaseElemento2", "IdElemento1" y "IdElemento2". En los dos primeros
> pondría el nombre de la clase del elemento y en los segundos los
> Identificadores.
>
> Todo esto debería funcionar teniendo en cuenta:
>
> 1) Cualquier elemento se puede relacionar con cualquier otro. Hoy son
> Documento, Tarea, Persona y Ejecutor, pero mañana pueden aparecer
> Expediente, Proyecto, Factura, ... Me gustaría hacerlo de forma
> genérica para que me valga para cualquier tipo de entidad.
>
> 2) Un Documento puede estar relacionado con una Tarea y viceversa.
> Cuando voy a buscar los Elementos relacionados con una Tarea, debo
> mirar en la tabla de relaciones si se encuentra como Elemento1 o como
> Elemento2, a ambos lados de la relación.
>
> En fin, me ha parecido lo suficientemente interesante como para
> plantearlo aquí.
>
> Aquí van las tablas como más o menos las tengo pensadas:
> http://jros.org/files/orm/tablas1.png
>
> Alguna idea?
>
>
> --
> 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