使用IDictionary <tkey,tvalue> </tkey,tvalue>映射与FluentNHibernate的三元关联

时间:2009-04-17 12:12:52

标签: c# .net nhibernate fluent-nhibernate

我正在尝试使用FluentNhibernate映射三元关联。

我有3张桌子:

  • TUser(PK int id, string name, ...)
  • TGroup(PK int id, string name, ...)
  • TRole(PK int id, string name, ...)

与他们联系的第四个人,代表三元协会:

  • TUserGroupRole(FK int userid, FK int groupid, FK int roleid)

基本上,用户对组具有特定角色。我在我的模型中使用了3种类型:

  • User
  • UserGroup
  • UserRole

User类中,我想使用IDictionary<UserGroup,UserRole>按组索引用户角色:

public class User
{
    public virtual int Id { get; set; }
    public virtual IDictionary<UserGroup, UserRole> Roles { get; set; }
    // ...
}

使用常规的hbm方式的XML映射文件,我使用<map>元素实现了这一点,如此(伪映射):

<map name="Roles" table="TUserGroupRole">
    <key column="userid"/>
    <index-many-to-many column="groupid" class="UserGroup"/>
    <many-to-many column="roleid" class="UserRole"/>
</map>

我无法弄清楚如何使用FluentNhibernate 生成相同的映射,因此非常感谢您对此方面的任何帮助。

2 个答案:

答案 0 :(得分:1)

为了回应您在FNH小组上的回复,请确保您导出的映射文件如下:

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyObject>()
    .ExportTo("path")

我倾向于同意这种回应,因为当元素出现故障时,我才见过这种类型的异常;当key / index或id元素不是第一个子元素时。

答案 1 :(得分:0)

使用FNH 1.3它应该看起来像

HasManyToMany(x => x.Roles)
    .ParentKeyColumn("userid")
    .AsTernaryAssociation("groupid")
    .ChildKeyColumn("roleid");