Eager Fetching with nhibernate Criteria API
我正试图在多个表上使用标准API,并希望加载这些表。
我的精简实体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Limit { Risk {get; set;} } class Risk { List<Company> Companies { get;set;} } class Company { List<Address> OldAdresses {get;set;} } class Address { string Street { get;set;} } |
我的条件调用如下:
1 2 3 4 5 6 7 8 | var CriterionGruppe = Expression.Eq("Account.Id", someGuid); var temp = _transaktion.Session.CreateCriteria(typeof(Limit)) .SetFetchMode("Risk", FetchMode.Eager) .SetFetchMode("Risk.Companies", FetchMode.Eager) .Add(CriterionGruppe) .SetResultTransformer(new DistinctRootEntityResultTransformer()) .List<Limit>(); |
地址仍然加载有许多选择。我怎样才能把公司的旧地址包括在我的标准电话中呢?
我已经在Ayende的博客上读到了一篇博客文章,在StackOverflow上也读到了其他几个问题。但仍然没有运气。
我希望有人能给我指明正确的方向。
提前谢谢彼得
我们什么时候必须在NHibernate中使用急装?它的用法是什么?
NHiberinate在多个层次上的渴望获取
艾文德博客
1 2 3 4 5 6 7 8 | var account = _transaktion.Session.Load<Account>(someGuid); var temp = _transaktion.Session.CreateCriteria(typeof(Limit)) .SetFetchMode("Risk", FetchMode.Eager) .SetFetchMode("Risk.Companies", FetchMode.Eager) .SetFetchMode("Company.OldAddresses", FetchMode.Eager) .Add(Expression.Eq("Account", account)) .SetResultTransformer(new DistinctRootEntityResultTransformer()) .List<Limit>(); |
然而,这是非常低效的。您正在加载大量重复数据以进行1个SQL查询。更好的方法是