2

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

我基本上有 3 个表:Items、Tags 和 TagsToItems。

每个项目可以有许多标签,由 TagsToItems 表定义。如何使用 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();

然而,这是抛出错误:

Initializing[Namespace.Item#11] - 无法延迟初始化角色集合:Namespace.DataAccess.NHibernate.Entities.Item.Tags,没有会话或会话已关闭

4

1 回答 1

1

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

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

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

HasManyToMany(x => x.Tags)
                .AsBag()
                .Table("TagsToItems")
                .ParentKeyColumn("ItemId")
                .ChildKeyColumn("TagId")
                .Not.LazyLoad()
                .Cascade.All();
于 2012-04-18T08:50:52.657 回答