我正在尝试使用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 生成相同的映射,因此非常感谢您对此方面的任何帮助。
答案 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");