2

我知道关于 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)方法的其他优点(因此)。

任何想法?我是不是丢了什么东西?难道我不知道我在说什么(很可能)?

4

0 回答 0