2009-05-20 2 views
11

я следующие определения отображения:nhibernate many-to-many mapping - дополнительный столбец в таблице сопоставления?

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

и

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

Это отображение генерирует таблицу отображения UserRoles, которая имеет две колонки - и UserId Идентификатор роли.

Однако я хотел бы добавить дополнительные атрибуты к этому отношению, то есть некоторые значения enum, определяющие состояние отношения, а также эффективный запуск & даты окончания.

Возможно ли это сделать в nhibernate или мне нужно добавить дополнительный класс здесь и изменить отношение m-to-m на 2 отношения [пользователь] 1-to-m [user_role] m-to-1 [role] ?

ответ

9

Вам необходимо добавить дополнительный класс, например. UserRole, в коде, чтобы сохранить дополнительные свойства.

Когда дело доходит до сопоставления, это может отображаться как класс, как вы упомянули. Но я также думаю, что это может быть отображен в виде составного-элемента отображения ролей:

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

Все свойства должны быть не-NULL, потому что они становятся частью первичного ключа таблицы UserRoles. Для получения дополнительной информации см:

+0

ТНХ. я дам ему попробовать – Greg

+0

Ссылки мертвы ... – Anttu

0

Добавить дополнительный класс.

Смежные вопросы