Я реализовал шаблон спецификации с Linq, как описано здесь https: //www.packtpub. com / article / nhibernate-3-using-linq-spec-data-access-layer
Теперь я хочу добавить возможность активной загрузки и не уверен, как лучше это сделать.
Общий репозиторий class в связанном примере:
public IEnumerable FindAll(Specification specification)
{
var query = GetQuery(specification);
return Transact(() => query.ToList());
}
public T FindOne(Specification specification)
{
var query = GetQuery(specification);
return Transact(() => query.SingleOrDefault());
}
private IQueryable GetQuery(
Specification specification)
{
return session.Query()
.Where(specification.IsSatisfiedBy());
}
И реализация спецификации:
public class MoviesDirectedBy : Specification
{
private readonly string _director;
public MoviesDirectedBy(string director)
{
_director = director;
}
public override
Expression> IsSatisfiedBy()
{
return m => m.Director == _director;
}
}
Это работает хорошо, теперь я хочу добавить возможность быстрой загрузки. Я понимаю, что активная загрузка NHibernate может быть выполнена с помощью Fetch в запросе.
Я ищу, нужно ли инкапсулировать логику активной загрузки в спецификации или передать ее в репозиторий, а также синтаксис Linq / дерева выражений, необходимый для этого (т.е. пример того, как это будет сделано).