Si no especifico en la persistencia que tipo de elemento es el que
guardo a la hora de cargar los objetos no podré saber que elemento es
un documento, persona, tarea, ... aunque ElementosRelacionados sea una
lista de Elementos, me gustaría instanciarlos como clases finales y
así saber de que tipo son.

Por otro lado el table-per-union-subclass no me vale, pues cada vez
que añadiera una entidad de tipo elemento a mi sistema debería tocar
todos los mappings.

On 14 dic, 01:20, Nestor Rodriguez <[email protected]> wrote:
> 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