2009-01-11 13 views
8

Digamos que tiene dos tablas, "Usuarios" y "UserRoles". Así es como las dos tablas están estructuradas (tabla - columnas):Fluidez NHibernate pregunta

Usuarios - UserID (int)

UserRoles - UserID (int), Papel (cadena)

Lo que yo quiero es que mi "Usuario "clase en mi dominio para tener un IList de roles. ¿Cómo construyo mi mapeo Fluent NHibernate para lograr esto?

Respuesta

13

Lo que estamos buscando es una de un conjunto de elementos, los cuales en la cartografía de HBM estándar es:

<set name="Roles" table="UserRoles"> 
    <key column="UserID" /> 
    <element column="Role" /> 
</set> 

Para Fluido NHibernate puede asignar este modo:

HasMany<string>(x => x.Roles) 
    .AsElement("Role"); 

Es posible que también deba especificar el nombre de la clave usando WithKeyColumn(string).

0

que creo que sería

public User() 
    { 
    Id(x => x.UserID); 
    HasMany<UserRoles>(x => x.UserRoles).AsBag(); 
    } 

Usted también tendrá que asegurarse de asignar la clase UserRoles así

+0

El problema es que UserRoles no es una clase. Es solo una lista de cadenas. La tabla de datos no está vinculando dos claves externas, solo una clave externa (ID de usuario) y un nombre de rol (cadena). –

0

Esto también trabajó:

HasMany<Role>(u => u.Roles) 
       .WithTableName("UserRoles") 
       .Component(role => role.Map(r => r.Name)) 
       .AsList(); 

No es necesario mapear papel o UserRoles.

Asegúrese de papel implementa IEquatable <Role> ;.

4

Fwiw esto tiene cambie minorly de nuestros días. La asignación actual es

HasMany<string>(x => x.Roles) 
    .Element("Role"); 
Cuestiones relacionadas