c# – 使用nhibernate Criteria API进行Eager Fetching
发布时间:2020-12-15 04:31:16 所属栏目:百科 来源:网络整理
导读:我试图在多个表上使用标准Api和急切加载. 我的精简实体看起来像这样: class Limit{ Risk {get; set;}}class Risk{ ListCompany Companies { get;set;}}class Company{ ListAddress OldAdresses {get;set;}}class Address{ string Street { get;set;}} 我的C
我试图在多个表上使用标准Api和急切加载.
我的精简实体看起来像这样: 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;} } 我的Criteria调用如下所示: 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上阅读了其他几个问题.但仍然没有运气. 我希望有人能指出我正确的方向. 在此先感谢彼得 When must we use eager loading in NHibernate? What is it’s usage? NHibernate Eager Fetching Over Multiple Levels Ayende Blog 解决方法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查询.一个更好的方法是 >加载实际需要的投影>使用Futures和Batched延迟加载来避免单个笛卡尔结果集并选择n 1. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |