2012-01-24 148 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>