2009-05-20 11 views
11

I tienen los siguientes definiciones de asignación:mapeo nhibernate many-to-many - columna adicional en la tabla de mapeo?

<class name="Role" table="Role" optimistic-lock="version" > 

    <id name="Id" type="Int32" unsaved-value="0" > 
     <generator class="native" /> 
    </id> 

    <property name="RoleName" type="String(40)" not-null="true" /> 

    <bag name="UsersInRole" generic="true" lazy="true" cascade="all" table="UserRoles" > 
     <key column="RoleId" /> 
     <many-to-many column="UserId" class="SystemUser, Domain"/> 
    </bag> 

y

<id name="Id" type="Int32" unsaved-value="0" > 
    <generator class="native" /> 
</id> 
<property name="UserName" type="String(40)" not-null="true" unique="true" /> 

Este mapeo genera UserRoles tabla de asignación, que tiene dos columnas - RoleId y UserId.

Sin embargo, me gustaría agregar atributos adicionales a esa relación, es decir, algunos valores enum que definen el estado de la relación, así como las fechas de inicio efectivas de &.

¿Es posible hacer en nhibernate o necesito agregar clase adicional aquí y cambiar la relación m-to-m en 2 relaciones [usuario] 1-a-m [user_role] m-to-1 [role] ?

Respuesta

9

Debe agregar una clase adicional, p. UserRole, en código para mantener las propiedades adicionales.

Cuando se trata de mapeo esto se puede mapear como una clase como usted mencionó. Pero también creo que puede ser mapeada como un elemento compuesto en la asignación de funciones:

<set name="UsersInRole" lazy="true" table="UserRoles" > 
    <key column="RoleId" /> 
    <composite-element class="UserRole"> 
    <many-to-one name="User" column="UserId" not-null="true"/> 
    <propery name="RelationState" not-null="true"/> 
    <propery name="StartDate" not-null="true"/> 
    <propery name="EndDate" not-null="true"/> 
    </composite-element> 
</set> 

Todas las propiedades deben ser no nulo, porque se convierten en parte de las claves primarias de la tabla UserRoles. Para obtener más información, véase:

+0

THX. Lo intentaré – Greg

+0

Los enlaces están muertos ... – Anttu

0

Añadir clase adicional.

Cuestiones relacionadas