流畅的NHibernate - 如何创建一对多的映射,中间有一个桥接表?

时间:2012-04-17 20:08:41

标签: fluent-nhibernate fluent-nhibernate-mapping

如何创建一对多的映射,其中间有一个桥接表?

我基本上有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,没有会话或   会议已经结束

1 个答案:

答案 0 :(得分:1)

事实证明,问题在于使用与项目相关联的标签集合。

标签集合无法初始化,因为当我尝试使用它时(在我看来),NHibernate会话的会话范围已经关闭。

我通过在映射上设置.Not.LazyLoad()解决了这个问题:

HasManyToMany(x => x.Tags)
                .AsBag()
                .Table("TagsToItems")
                .ParentKeyColumn("ItemId")
                .ChildKeyColumn("TagId")
                .Not.LazyLoad()
                .Cascade.All();