我的测试基类中有一个方法助手,如下所示:
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中的所有属性?
答案 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)