2009-05-20 21 views
11

Mam w następstwie definicje mapowania:mapowanie wielu do wielu nhibernate - dodatkowa kolumna w tabeli mapowania?

<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> 

i

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

To odwzorowanie generuje UserRoles tablica odwzorowań, która posiada dwie kolumny - RoleId i identyfikatora użytkownika.

Chciałbym jednak dodać dodatkowe atrybuty do tej relacji - tj. Niektóre wartości wyliczeniowe definiujące stan relacji oraz efektywne daty rozpoczęcia &.

Czy można to zrobić w nhibernate lub czy muszę dodać tutaj dodatkową klasę i zmienić relację m-na-m na 2 relacje [użytkownik] 1-na-m [user_role] m-to-1 [rola] ?

Odpowiedz

9

Musisz dodać dodatkową klasę, np. UserRole, w kodzie, aby zachować dodatkowe właściwości.

Jeśli chodzi o mapowanie, można to zmapować jako klasę, o której wspomniałeś. Ale także, że może być odwzorowany jako elementu kompozytowych w mapowaniu Rola:

<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> 

Wszystkie obiekty muszą być nie-null, ponieważ oni stają się częścią podstawowych kluczy tabeli UserRoles. Aby uzyskać więcej informacji, patrz:

+0

thx. Dam ci spróbować – Greg

+0

Linki są martwe ... – Anttu

0

Dodaj dodatkową klasę.

Powiązane problemy