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
