Fluent NHibernate. Как мне создать сопоставление «один ко многим», в котором есть мостовая таблица посередине?

Как создать сопоставление «один ко многим», в котором есть мостовая таблица посередине?

В основном у меня есть 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, сеанс или сеанс не был закрыт.


person Jamie Dixon    schedule 17.04.2012    source источник


Ответы (1)


Оказывается, проблема заключается в использовании коллекции тегов, связанной с элементом.

Коллекция тегов не могла быть лениво инициализирована, потому что к тому времени, когда я пытался ее использовать (на мой взгляд), область сеанса сеанса NHibernate была закрыта.

Я решил это, установив .Not.LazyLoad() в сопоставлении:

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