Yo diria que hagas el mapping de la herencia y haces un <many-to-one
class="Party"> en Customer y en Party mapearias la coleccion de Roles.

2011/6/1 Carlos Peix <[email protected]>

> Hola gente,
>
> Quiero consultarles algo ya que estoy tratando de encontrar una forma de
> mapeo mas o menos estandar para un problema mas o menos estandar en mis
> modelos. La consulta no solo se relaciona con el mapeo en NH, tambien me
> interesa determinar la estructura de BD mas adecuada.
>
> Basicamente es la relacion evento-rol-actor, para que quede mas claro,
> permitanme conpartir algunas clases:
>
> // evento
> public class Order {
>     Guid _id;
>     Customer _customer;
> }
>
> // el rol
> public class Customer {
>     Guid _id;
>     Party _actor;    // (1) u Object _actor
> }
>
> // actores (ver Fowler para teoria sobre Party/Company/Person y
> accountability)
> public class Company : Party {
>     Guid _id;
>     string _companyName;
> }
>
> public class Person : Party {
>     Guid _id;
>     string _firstName;
>     string _lastName;
> }
>
> (1) aqui puedo tener definida alguna clase base para los actores que pueden
> adoptar el rol de customer (como seria el caso de Party) y otras veces no,
> para lo cual tendre que usar Object. Entiendo que esto me lleva a dos
> respuestas distintas a mi consulta.
>
> La pregunta es como me conviene mapear la propiedad _actor de Customer, ya
> se en el caso en que esta deba ser de tipo Object o Party.
>
> He probado con any y con many-to-one. Este objeto Customer podria o no
> utilizar el mismo valor para el Id que el actor. Opino que lo mejor seria
> que no lo hagan. Por ahi con Guids no hay problema pero en otros casos me
> restringe.
>
> Un punto adicional seria que, probablemente, necesite en la entidad Company
> o Person una coleccion de todos los roles desempeñados, seria como la
> relacion opuesta y, en este caso, definitivamente no los roles no van a
> compartir ninguna clase base salvo, eventualmente, una interfaz "IRol".
>
> ----------------------------------
> Carlos Peix
>
>  --
> 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