我有一些对象:
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/