2009-05-20 7 views
11

I folgende Zuordnungsdefinitionen haben:Nhibernate-Viele-zu-Viele-Zuordnung - Zusätzliche Spalte in der Zuordnungstabelle?

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

und

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

Diese Zuordnung erzeugt Userroles Zuordnungstabelle, die zwei Spalten aufweist - RoleId und Benutzer-ID.

Allerdings möchte ich hinzufügen, dass zusätzliche Attribute zu dieser Beziehung - d. H. Einige Enum-Werte definieren Zustand der Beziehung sowie effektive Start & Enddaten.

Ist es möglich, in Nhibernate zu tun oder muss ich hier zusätzliche Klasse hinzufügen und Beziehung m-zu-m in 2 Relationen ändern [Benutzer] 1-zu-m [Benutzer_Rolle] m-zu-1 [Rolle] ?

Antwort

9

Sie müssen eine zusätzliche Klasse hinzufügen, z. UserRole, im Code, um die zusätzlichen Eigenschaften zu behalten.

Wenn es um das Mapping geht, kann dies wie erwähnt als Klasse gemappt werden. Aber ich denke auch, kann es als ein Verbundelement in der Rollenzuordnung zugeordnet werden:

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

Alle Objekte werden dürfen nicht Null, weil sie einen Teil des Primärschlüssels der Tabelle Userroles worden sind. Für weitere Informationen siehe:

+0

thx. Ich werde es versuchen – Greg

+0

Links sind tot ... – Anttu

0

Fügen Sie zusätzliche Klasse hinzu.

Verwandte Themen