我知道很多关于NHibernate的热切加载和延迟加载的说法和帖子。我读了所有(谎言!)线程,帖子和答案,说明为什么我应该或不应该在映射时使用“lazy = false”,或者当我认为是一个好的地方时如何使用HQL或Criteria来急切加载对象。虽然,当我使用ISession.Get方法时,我还没有找到任何有关加载集合属性的信息。让我解释一下这个场景:
我想使用通用存储库(所有其他专门的后代类的基础),如下所示:
class Repository<T>
{
public T GetById(long id)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return session.Get<T>(id);
}
}
}
我的问题是:有没有办法使用通用的“GetById”方法(就像上面一样),甚至如此使用加载其中加载的所有对象?
我知道有些人会回答“只是使用NHibernateUtil.Initialize”,但为此我必须“知道”我的实体,在这种情况下,我必须覆盖我的方法并丢失我的存储库的一般优势。关于使用HQL或Criteria或其他不使用“Get”简单性的方法也可以这么说。此外,我希望获得Get(或Load)方法(because of this)的其他优点。
有什么想法吗?我丢了什么东西吗?难道我不知道我在谈论什么(非常可能)?