如何将NHibernate会话设置为急切获取

时间:2012-05-19 20:53:35

标签: nhibernate

我的测试基类中有一个方法助手,如下所示:

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中的所有属性?

2 个答案:

答案 0 :(得分:1)

根据NHibernate docs here你应该使用NHibernateUtility类,所以将你的代码改成这样的东西应该有所帮助:

using(var session = GetSession())
{
    var entity = session.Get<TEntity>(id);
    NHibernateUtil.Initialize(entity);   
}

答案 1 :(得分:0)

或者,你可以使用nHib的一个查询API(我个人更喜欢QueryOver)来做类似的事情 session.QueryOver<Cat>().Where(cat => cat.Id == id).Fetch(c => c.Kittens).Eager
这为您提供了额外的好处,即可以精确控制要获取的属性/集合。

此外,建议您不要抽象出存储库中的ISession用法 它会阻止你从批处理这样的nHibernate功能中受益(参见ayende的帖子here