标签: eager-loading

在NHibernate Linq提供程序中获取vs FetchMany

NHibernate渴望加载可以使用Fetch和完成FetchMany,如在Mike Hadlow博客上的NHibernate Linq Eager Fetching中所述.

这两种方法有什么区别,在什么情况下都会使用?

linq nhibernate fetch eager-loading

74
推荐指数
1
解决办法
2万
查看次数

我如何热切地将实体的子孙元素包含在实体框架代码优先中?

想象一下这样的三个实体(客户,书籍,作者):

客户有很多书

一本书有一位作者

我使用该数据打印这样的报告:

Customer: Peter
  Book: To Kill a Mockingbird - Author: Harper Lee
  Book: A Tale of Two Cities - Author: Charles Dickens
Customer: Melanie
  Book: The Hobbit - Author: J. R. R. Tolkien
Run Code Online (Sandbox Code Playgroud)

当我查询客户时,我按预期得到了一堆具有以下性质的查询

  1. 获取客户的查询
  2. 每个客户查询以获取他的书籍
  3. 每本书的查询以获取其作者

我可以通过包含这样的书来减少查询次数:

var customers = db.Customers.Include(c => c.Books);

但我不知道如何加载第三级(作者).我怎样才能做到这一点?

entity-framework eager-loading ef-code-first

61
推荐指数
3
解决办法
3万
查看次数

如何确定是否已加载Rails关联?

有没有人知道确定Rails关联是否已被急切加载的方法?

我的情况:我有一个结果集,有时其中一个关联是急切加载的,有时它不是.如果它没有急切加载,那么我想使用ActiveRecord的查找查找关联.如果它是急切加载,我想使用检测.

例如,假设我的项目模型中有一个shipping_info对象的"has_many"数组.然后:

如果项目是急切加载的,最有效的负载是:

item.shipping_infos.detect { |si| si.region == "United States" }
Run Code Online (Sandbox Code Playgroud)

如果项目未加载,则最有效的加载是:

item.shipping_infos.where(region: "United States").first
Run Code Online (Sandbox Code Playgroud)

但除非我知道它是否是急切加载,否则我不知道要调用哪些代码来有效地获取记录.如果我在第一种方法没有急切加载时使用它,那么我必须查找超过必要的DB记录.如果我在急切加载时使用第二种方法,那么我的急切加载对象将被忽略.

activerecord ruby-on-rails eager-loading

54
推荐指数
4
解决办法
2万
查看次数

雄辩的渴望加载顺序

我有雄辩的查询问题.我正在使用急切加载(一对一关系)来获得' 学生 '使用' 考试 ',使用下面的代码.

Student::with('exam')->orderBy('exam.result', 'DESC')->get()
Run Code Online (Sandbox Code Playgroud)

我想通过' 考试 '中的' 结果 '列来订购收到的行.我在用

->orderBy('exam.result', 'DESC')
Run Code Online (Sandbox Code Playgroud)

但它没有用.有什么想法怎么做?

eager-loading laravel eloquent laravel-4

51
推荐指数
5
解决办法
4万
查看次数

Laravel Eloquent:渴望加载多个嵌套关系

什么laravel说:

$books = App\Book::with('author.contacts')->get();
Run Code Online (Sandbox Code Playgroud)

我需要的是这样的事情

$books = App\Book::with('author[contacts,publishers]')->get();
Run Code Online (Sandbox Code Playgroud)

我们渴望在关系中加载多个关系.

这可能吗?

eager-loading laravel eloquent

38
推荐指数
4
解决办法
2万
查看次数

使用NHibernate 3.0.0时战斗笛卡尔积(x-join)

我的数学很差,但我很清楚笛卡尔的产品是什么.
这是我的情况(简化):

public class Project{
 public IList<Partner> Partners{get;set;}
}
public class Partner{
 public IList<PartnerCosts> Costs{get;set;}
 public IList<Address> Addresses{get;set;}
}
public class PartnerCosts{
 public Money Total{get;set;}
}
public class Money{
 public decimal Amount{get;set;}
 public int CurrencyCode{get;set;}
}
public class Address{
 public string Street{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我的目标是有效地加载整个项目.

问题当然是:

  • 如果我试图加载合作伙伴及其成本,查询返回大量行
  • 如果我懒加载Partner.Costs,db会收到垃圾邮件请求(比第一种方法快一点)

正如我所读到的,常见的解决方法是使用MultiQueries,但我只是不明白.
所以我希望通过这个确切的例子来学习.

如何有效加载整个项目?

Ps我正在使用NHibernate 3.0.0.
请不要用hql或字符串形式的标准api方法发布答案.

nhibernate cartesian-product eager-loading

32
推荐指数
2
解决办法
8284
查看次数

EF CTP5 - 强类型的预先加载 - 如何包含嵌套的导航属性?

试图将我们的EF4解决方案转换为EF CTP5,并遇到了问题.

这是模型的相关部分:

在此输入图像描述

相关关系: - 一个许多城市 - 一个城市只有一个

现在,我想执行以下查询: - 获取系统中的所有县,并包括所有城市,以及这些城市的所有州.

在EF4中,我会这样做:

var query = ctx.Counties.Include("Cities.State");
Run Code Online (Sandbox Code Playgroud)

在EF CTP5中,我们有一个强类型的包含,它需要一个Expression<Func<TModel,TProperty>>.

我可以让县的所有城市都没有问题:

var query = ctx.Counties.Include(x => x.Cities);
Run Code Online (Sandbox Code Playgroud)

但我如何才能获得这些城市的

我使用纯POCO,所以County.CitiesICollection<City>,所以我不能这样做:

var query = ctx.Counties.Include(x => x.Cities.State)
Run Code Online (Sandbox Code Playgroud)

因为ICollection<City>没有一个叫做的属性State.

这几乎就像我需要使用嵌套的IQueryable.

有任何想法吗?我是否需要回退到这个场景中包含的魔术字符串?

entity-framework poco eager-loading entity-framework-ctp5

29
推荐指数
1
解决办法
8474
查看次数

Laravel - 渴望加载多态关系的相关模型

我可以在没有任何n + 1问题的情况下急切加载多态关系/模型.但是,如果我尝试访问与多态模型相关的模型,则会出现n + 1问题,而我似乎无法找到修复.以下是在本地查看的确切设置:

1)DB表名/数据

history

历史表

companies

在此输入图像描述

products

在此输入图像描述

services

在此输入图像描述

2)模型

// History
class History extends Eloquent {
    protected $table = 'history';

    public function historable(){
        return $this->morphTo();
    }
}

// Company
class Company extends Eloquent {
    protected $table = 'companies';

    // each company has many products
    public function products() {
        return $this->hasMany('Product');
    }

    // each company has many services
    public function services() {
        return $this->hasMany('Service');
    }
}

// Product
class Product extends Eloquent {
    // each product belongs to a …
Run Code Online (Sandbox Code Playgroud)

polymorphism polymorphic-associations eager-loading laravel eloquent

28
推荐指数
3
解决办法
2万
查看次数

渴望用NHibernate加载儿童集合

我想加载根实体并急切加载它的所有子集合和聚合成员.

一直试图SetFetchMode在FluentNHibernate中使用它,但我在其中一个子集合中得到重复,因为我有3个级别的深度.DistinctRootEntityResultTransformer遗憾的是,只删除了根重复.

return Session.CreateInvoiceBaseCriteria(query, archived)
    .AddOrder(new Order(query.Order, query.OrderType == OrderType.ASC))
    .SetFetchMode("States", FetchMode.Eager)
    .SetFetchMode("Attestations", FetchMode.Eager)
    .SetFetchMode("AttestationRequests", FetchMode.Eager)
    .SetFetchMode("AttestationRequests.Reminders", FetchMode.Eager)
    .SetResultTransformer(new DistinctRootEntityResultTransformer())
    .List<Invoice>();
Run Code Online (Sandbox Code Playgroud)

我可以使用多个查询或类似的东西来存档吗?

此外,这种方法不会导致数据库中不必要的巨大结果集吗?

有什么建议?

nhibernate querying eager-loading

24
推荐指数
2
解决办法
1万
查看次数

强制加载其他延迟加载的属性

我有一个Hibernate对象,它的属性都是懒惰加载的.大多数这些属性是其他Hibernate对象或PersistentSets.

现在我想迫使Hibernate一次性加载这些属性.

当然,我可以"触摸"这些属性,object.getSite().size()但也许还有另一种方法来实现我的目标.

java hibernate lazy-loading eager-loading

24
推荐指数
2
解决办法
3万
查看次数