NHibernate通过自定义列进行多对多映射连接

时间:2015-07-17 13:22:28

标签: c# nhibernate fluent-nhibernate

我有两个表Counter和Group,我想用中间的Counter_To_Group表链接。

Counter [Id, Version, PackageId, ...]
Group [Id, ...]
Counter_To_Group [Counter_Id, Counter_Version, Counter_PackageId, Group_Id]

Inside Counter对象我希望有一个Group列表:

public IEnumerable<Group> Groups {get; set;}

如何使用Fluent NHibernate进行映射?

2 个答案:

答案 0 :(得分:1)

只要您在关系上有其他属性,就需要业务模型中的特定实体(或组件)来表示它们。

Counter -(one-to-many)-> CounterToGroup -(many-to-one)-> Group

CounterToGroup可以是一个组件(在XML映射中称为复合元素)。该组件的优点是它没有标识,也不必从数据库中明确添加/删除。没有父母就不可能存在。 (另一方面,它不能在Counter的不同实例之间共享,但这是你很可能不想要的。)

答案 1 :(得分:1)

假设您已在映射中正确设置了复合键,则可以按照以下步骤进行操作,

HasManyToMany<Group>(x => x.Groups)
    .Table("Counter_To_Group") 
    .ParentKeyColumns.Add("Counter_Id", "Counter_Version", "Counter_PackageId") 
    .ChildKeyColumn("Group_Id")