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 之一(我个人更喜欢 QueryOver)来执行类似
session.QueryOver<Cat>().Where(cat => cat.Id == id).Fetch(c => c.Kittens).Eager.
这为您提供了额外的好处,即准确控制将获取哪些属性/集合。

此外,建议您不要抽象出您ISession在存储库中的使用。
它会阻止您从批处理等 nHibernate 功能中受益(请参阅 ayende 的帖子

于 2012-05-20T13:27:07.767 回答