2

テストの基本クラスに、次のようなメソッド ヘルパーがあります。

protected TEntity Fetch<TEntity>(Guid id) where TEntity : Entity
{
    using (var session = GetSession())
        return session.Get<TEntity>(id);
}

したがって、統合テストから次のように呼び出すことができます。

var persistedFoo = Fetch<Foo>(foo.Id);

Fetch メソッドでセッションを設定して、TEntity のすべてのプロパティを熱心にフェッチするにはどうすればよいですか?

4

2 に答える 2

1

ここのNHibernateのドキュメントによると、NHibernateUtilityクラスを使用する必要があるため、コードを次のようなものに変更すると次のようになります。

using(var session = GetSession())
{
    var entity = session.Get<TEntity>(id);
    NHibernateUtil.Initialize(entity);   
}
于 2012-05-20T01:47:49.153 に答える
0

あるいは、nHib のクエリ API の 1 つを使用して (個人的には QueryOver を好みます)、次のようなことを行うことができます
session.QueryOver<Cat>().Where(cat => cat.Id == id).Fetch(c => c.Kittens).Eager
これにより、フェッチされるプロパティ/コレクションを正確に制御できるという追加のボーナスが得られます。

ISessionまた、リポジトリでの使用を抽象化しないことをお勧めします。
バッチ処理などの nHibernate 機能の恩恵を受けることができなくなります (ここの ayende の投稿を参照してください) 。

于 2012-05-20T13:27:07.767 に答える