Я занимаюсь проблемой N + 1, и я хочу, чтобы загрузить коллекцию в конкретном запросе, но я получаю сообщение об ошибке «не удалось лениво инициализировать коллекцию» или запрос сохраняет ленивую загрузку.Fetch Eager NHibernate не удалось лениво инициализировать коллекцию
Я пробовал много предложений, заданных членами stack, но никто не работал.
Мой пример лицо:
public class Bar
{
private _IList<Foo> _fooList;
public IEnumerable<Foo> FooList {get{return _fooList;} }
}
Пример карты:
HasMany(d => d.FooList)
.Access.CamelCaseField(Prefix.Underscore)
.KeyColumn("IdBar")
.Cascade.AllDeleteOrphan()
.Inverse();
запросов, которые подбрасывает ошибка (не удалось лениво инициализировать коллекцию):
var test = GetSession().Query<Bar>()
.Fetch(b => b.FooList);
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.List();
запрос, который еще с N + 1:
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.JoinQueryOver<Foo>(d => d.FooList)
.Where(f => f.Active).List<Bar>();
Foo fooAlias = null;
IList<Bar> bars= GetSession().QueryOver<Bar>()
.Fetch(d => d.FooList).Eager
.JoinAlias(d => d.FooList,() => fooAlias)
.List();
Мне нужна помощь в решении этой проблемы с N + 1, с нетерпением загружая коллекцию FooList.
Нет, я еще не знаю, как использовать HQL. Я буду искать его – TiagoBrenck
Лучше использовать HQL в соответствии с моими впечатлениями, так как иногда трудно моделировать какие-то запросы в свободном доступе. Я бы использовал HQL и решил проблему позже, как только это произойдет и в ней. –