nHibernate - 急切地获取已经填充了子列表的列表

标签 nhibernate eager-loading

我有一些对象:

Public Class Person() {
    public int Id {get;set;}
    public IList<Account> Accounts {get;set;}
    public string Email {get; set;}
}

public class Account(){
    public int Id {get;set;}
    public IList<AccountPayment> Payments {get;set;}
    public IList<Venue> Venues {get;set;}
}

public class AccountPayment(){
    public int Id {get;set;}
    public DateTime PaymentDate {get;set;}
    public decimal PaymentAmount {get;set;}
}

public class Venue(){
    public int Id {get;set;}
    public string AddressLine1 {get;set;}
    public string Postcode {get;set;}
}

这些类通过 nHibernate 映射到 MS Sql - 每个类的数据库中有一个表......

我想在我的存储库中创建一个方法 GetAccounts(int PersonID),它将返回一个列表,其中包含以最有效的方式填充的所有帐户的子集合。任何人都可以给我任何关于如何做到这一点的指示 - 如果我可以帮助它,我真的不想将列表设置为我的映射中的子选择......

谢谢。

最佳答案

如果您已经按照您提到的方式将类映射到表,为什么不直接调用 Person 对象来获取他们的所有帐户?当您从存储库调用 Person 对象时,您可以预先加载帐户。像这样:

 public Person GetById(int id)
    {
        using (var tx = _sessionBuilder.GetSession().BeginTransaction())
        {
            // -- Lazy load way --
            //Person person = _sessionBuilder.GetSession().Get<Person>(id);
            //tx.Commit();
            //return person;

            // -- Eager load way --                
            Person person = _sessionBuilder.GetSession().CreateCriteria<Person>()
                   .Add(Restrictions.IdEq(id))
                   .SetFetchMode("Accounts", FetchMode.Eager)
                   .UniqueResult<Person>();
            tx.Commit();
            return person;
        }
    }

关于nHibernate - 急切地获取已经填充了子列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2818913/

相关文章:

ruby-on-rails - Rails 急切加载,可能的错误

ruby-on-rails - Rails 急切加载似乎查询错误

java - 强制急切加载其他延迟加载的属性

c# - 如何在 NHibernate 中做一个不等于

asp.net-mvc - Rhino.Security : second-level cache is never hit for DetachedCriteria

c# - 无法将类型为 'NHibernate.Hql.Ast.HqlCast' 的对象转换为类型“NHibernate.Hql.Ast.HqlBooleanExpression”

.net - 我们如何在基于Dot Net的Azure移动服务中加载相关对象(预加载)?

NHibernate:无法解析继承的 id 属性

vb.net - 实现 NHibernate 单元测试以使用 VB.NET/MBUnit 生成模式

eloquent - Laravel Eloquent 中的预加载嵌套关系