如何创建一对多的映射,其中间有一个桥接表?
我基本上有3个表:Items,Tags和TagsToItems。
每个Item可以有很多TagsToItems表定义的Tags。如何使用Fluent NHibernate正确设置此映射?
我一直在玩HasMany
,但还没有弄清楚它如何与桥牌一起使用。
HasMany(x => x.Tags).Table("TagsToItems").KeyColumn("ItemId");
我最近解决此问题的尝试如下:
HasManyToMany(x => x.Tags)
.AsBag()
.Table("TagsToItems")
.ParentKeyColumn("ItemId")
.ChildKeyColumn("TagId")
.Cascade.All()
.Inverse();
但是这会引发错误:
初始化[Namespace.Item#11] - 无法初始化a 角色集合: Namespace.DataAccess.NHibernate.Entities.Item.Tags,没有会话或 会议已经结束
答案 0 :(得分:1)
事实证明,问题在于使用与项目相关联的标签集合。
标签集合无法初始化,因为当我尝试使用它时(在我看来),NHibernate会话的会话范围已经关闭。
我通过在映射上设置.Not.LazyLoad()
解决了这个问题:
HasManyToMany(x => x.Tags)
.AsBag()
.Table("TagsToItems")
.ParentKeyColumn("ItemId")
.ChildKeyColumn("TagId")
.Not.LazyLoad()
.Cascade.All();