Использование активной загрузки с шаблоном спецификации

Я реализовал шаблон спецификации с 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 / дерева выражений, необходимый для этого (т.е. пример того, как это будет сделано).

5
задан Community 23 May 2017 в 12:25
поделиться