2

中央にブリッジテーブルがある1対多のマッピングを作成するにはどうすればよいですか?

基本的に、Items、Tags、TagsToItemsの3つのテーブルがあります。

各アイテムは、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セッションのセッションスコープが閉じていたため、Tagsコレクションを遅延初期化できませんでした。

.Not.LazyLoad()マッピングを設定することでこれを解決しました:

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