ここに概説されているように、Linqを使用して仕様パターンを実装しましたhttps://www.packtpub.com/article/nhibernate-3-using-linq-specifications-data-access-layer
私は今、熱心な負荷をかける機能を追加したいと思っていますが、それを実行するための最良の方法がわかりません。
リンクされた例の汎用リポジトリクラス:
public IEnumerable<T> FindAll(Specification<T> specification)
{
var query = GetQuery(specification);
return Transact(() => query.ToList());
}
public T FindOne(Specification<T> specification)
{
var query = GetQuery(specification);
return Transact(() => query.SingleOrDefault());
}
private IQueryable<T> GetQuery(
Specification<T> specification)
{
return session.Query<T>()
.Where(specification.IsSatisfiedBy());
}
そして仕様の実装:
public class MoviesDirectedBy : Specification<Movie>
{
private readonly string _director;
public MoviesDirectedBy(string director)
{
_director = director;
}
public override
Expression<Func<Movie, bool>> IsSatisfiedBy()
{
return m => m.Director == _director;
}
}
これはうまく機能しています。今度は、熱心にロードできる機能を追加したいと思います。NHibernateの積極的な読み込みは、クエリでFetchを使用して実行できることを理解しています。
私が探しているのは、熱心な読み込みロジックを仕様内にカプセル化するか、それをリポジトリに渡すか、そしてこれを実現するために必要なLinq /式ツリー構文(つまり、それがどのように行われるかの例)です。