2012-01-24 151 views
0

我有3个表用户,AccessLevels,角色。我的用户级别有public virtual Dictionary<Role,AccessLevel> Roles {get; set;}和 角色类别有public virtual Dictionary<User,AccessLevel> Users {get;set;}?映射中应如何表示这些字典?映射字典

回答

0

在FluentNhibernate它看起来像

HasManyToMany(user => user.Roles) 
    .Table("UserRoleAccessLevel") 
    .AsEntityMap("role_id") 
    .KeyColumn("user_id"); 

HasManyToMany(role => role.Users) 
    .Table("UserRoleAccessLevel") 
    .AsEntityMap("user_id") 
    .KeyColumn("role_id"); 

现在不能测试它虽然

更新:在的hbm.xml

<map name="Roles" table="UserRoleAccessLevel"> 
    <key column="user_id" /> 
    <index-many-to-many class="Role" column="role_id" /> 
    <many-to-many class="AccessLevel" column="accesslevel_id" /> 
</map> 

<map name="Users" table="UserRoleAccessLevel"> 
    <key column="role_id" /> 
    <index-many-to-many class="User" column="user_id" /> 
    <many-to-many class="AccessLevel" column="accesslevel_id" /> 
</map> 
+0

谢谢。但我对FluentNHibernate并不熟悉。你能说我如何在映射文件中做到这一点? – k0lpak

0

这将是非常好的,如果你提供你的表的结构,特别是AccessLevels表。据我可以猜测你的桌子的结构,我可以建议你这个映射

<class name="User" table="Users"> 
    <id name="Id" column="user_id"> 
     <generator class="native" /> 
    </id> 

    <property name="Name" column="user_name" not-null="true" /> 

    <map name="Roles" table="AccessLevels" cascade="save-update"> 
     <key column="user_id" /> 
     <map-key-many-to-many column="role_id" class="Role" /> 
     <one-to-many class="AccessLevel"/> 
    </map> 
</class> 

<class name="Role" table="Roles"> 
    <id name="Id" column="role_id"> 
     <generator class="native" /> 
    </id> 

    <property name="Name" column="user_name" not-null="true" /> 
</class> 

<class name="AccessLevel" table="AccessLevels"> 
    <id name="Id" column="Id"> 
     <generator class="native" /> 
    </id> 

    <property name="Level" column="level" not-null="true" /> 
    <many-to-one name="User" column="user_id" not-null="true" cascade="save-update" /> 
    <many-to-one name="Role" column="role_id" not-null="true" cascade="save-update" /> 
</class>