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
