标签: eager-loading

如何在运行时强制加载?

我正在使用 Fluent NHibernate。我在运行时有一个对象,其中包含可能已填充或未填充的惰性集合/属性。我计划序列化该对象,并需要在我这样做之前填充所有集合/属性。如何在运行时“热切加载”我的对象?

c# nhibernate lazy-loading fluent-nhibernate eager-loading

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

DDD 性能问题急切加载 AR 子实体

在过去的日子里,我正在制作一个示例应用程序来申请/学习 DDD。DDD 的原则之一(如果我错了,请纠正我)是对实体的所有更改都应该通过聚合根(AR)进行,并且 AR 应该加载他的子实体。这样更容易验证聚合一致性。只有一个小细节让我感到困扰。我无法理解 DDD 如何处理性能问题。想象一下,我有一个 Order(AR),比如说有 20000、30000 个 OrderLine。急切加载大量子记录时会存在性能问题。将订单说成 AR,您可以想象另一种可能发生这种情况的场景。我期待着阅读您对这个主题的看法。

domain-driven-design eager-loading

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

有没有办法用 dbcontext 全部包含()?

DbContext使用预先加载查询 a时,需要Include("Navigation")填充导航属性。然而,在某些情况下,我想简单地为一个实体提供Include 所有导航属性。有没有办法做到这一点,或者有办法做到这一点?我假设你可以通过反思,但我宁愿避免这种情况。

我知道的:

var entity = db.Table.Include("Navigation1").Include("Navigation2").First();
Run Code Online (Sandbox Code Playgroud)

我想要的是:

var entity = db.Table.IncludeAll().First(); 
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc entity-framework eager-loading dbcontext

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

实体框架 .include 性能问题

我有以下查询非常慢。我是 Entity Framework 的新手,我相信它必须对 Eager Loading、Lazy Loading 或 Explicit Loading 做一些事情。需要帮助优化以下 C# 语句。

var queryResult = CurrentSession.Set<SomeType_T>().Include(a => a.SomeType1_T)
                                .Include(a => a.SomeType1_T.Catalog_Type_T)
                                .Include(a => a.SomeType1_T.SomeType4_T)
                                .Include(a => a.SomeType1_T.SomeType2_T)
                                .Include("SomeType1_T.SomeType2_T.SomeType3_T")
                                .Include(a => a.SomeType1_T.SomeType4_T.SomeType5_T)
                                .Include(a => a.SomeType1_T.SomeType5_T)
                                .Include(a => a.SomeType1_T.Questions_T)
                                .Include(a => a.SomeType1_T.Questions_T.Question_Type_T)
                                .Include(a => a.SomeType1_T.Members_T)
                                .Include(b => b.SomeMasterType_T)
                                .Include(b => b.SomeMasterType_T.SomeMasterType1_T)
                                .Include(c => c.SomeType6_T)
                                .Include(d => d.SomeType7_T)
                                .Include(d => d.SomeType8_T)
                                .Include(d => d.SomeType8_T1)
                                .Where(t => t.SomeType9_T == _MatchThisKey);
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework lazy-loading eager-loading

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

Laravel 急切加载功能限制

我有工作职能,但是,我想限制每位顾问返回的治疗数量。

工作示例:

Clinic::where('user_id', Auth::id())
            ->with('consultants.specialism', 'consultants.treatments')
            ->first();
Run Code Online (Sandbox Code Playgroud)

建议的(但不起作用)示例:

Clinic::where('user_id', Auth::id())
            ->with('consultants.specialism')
            ->with(['consultants.treatments' => function ($query) {
                $query->take(3);
            }])
            ->first();
Run Code Online (Sandbox Code Playgroud)

不幸的是,takeorlimit函数将其限制为返回的处理总数。

我希望将每位顾问的治疗次数限制为最多 3 次,而不是总数。

请问我怎样才能实现这个目标?

php eager-loading laravel laravel-5.3

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

我可以使用 join 来伪造 laravel 预加载吗?

我读过几篇关于为什么急切加载使用多个查询而不是加入此处此处此处的文章。但是,我认为有必要使用联接而不是急切加载。我将如何构造查询,以便可以访问子对象,就好像它是通常急切加载的对象一样?

示例:获取居住在某条街道上的人员,并同时加载该地址。我不想加载这个人的所有地址,因为他住在很多地方;仅匹配查询的位置。通过急切加载和 whereHas,我必须重复查询,而且查询并不总是这么简单:

People::with(['address', function($query) use ($street_name){
  return $query->where('street_name', $street_name);
}])->whereHas('address', function($query) use ($street_name){
  return $query->where('street_name', $street_name);
})->get();
Run Code Online (Sandbox Code Playgroud)

可能

People::query()->join('address', function($join){
  $join->on(...)
})->where('street_name', $street_name);
Run Code Online (Sandbox Code Playgroud)

那么问题是我不能使用这个:

$person->address
Run Code Online (Sandbox Code Playgroud)

有没有办法接受连接并对其进行按摩(使用选择?),使其看起来像是急切加载的?

join eager-loading laravel

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

实施急切加载以停止N + 1-Rails

我目前有一个页面,需要11秒钟才能加载。我正在使用Bullet Gem帮助我找到N + 1查询的发生位置。它给了我一些输出,但是我真的不知道该怎么做。这是Bullet的输出:

GET /events/1679/dashboard
USE eager loading detected
  RSVP => [:tickets]
  Add to your finder: :includes => [:tickets]
Call stack
  /Users/cameronbass/Desktop/Work/blackbird-rsvp/app/decorators/rsvp_decorator.rb:54:in `tickets?'
  /Users/cameronbass/Desktop/Work/blackbird-rsvp/app/views/accepted_rsvps/_list.html.erb:33:in `block in _app_views_accepted_rsvps__list_html_erb___1211423417683052584_70339569780320'
Run Code Online (Sandbox Code Playgroud)

告诉我放在这条线上

def tickets?
  rsvp.tickets.any?
end
Run Code Online (Sandbox Code Playgroud)

这是关联:

has_many :tickets, through: :attendees
Run Code Online (Sandbox Code Playgroud)

Attendee.rb

has_one :ticket
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails bullet eager-loading

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

澄清 laravel 的急切加载/修改器/访问器

我正在制作一个用于工作的 laravel 应用程序,我需要为所有用户加载他们的附加角色,而不需要任何角色嵌套。我将本教程用于角色:https : //medium.com/@ezp127/laravel-5-4-native-user-authentication-role-authorization-3dbae4049c8a。如果我 public $with = ['roles'];在我的用户模型上使用它返回用户对象中的整个角色对象,我需要它只返回角色:'role_name';

 /**
 * set up eloquent between roles/user
 *
 * @return \Illuminate\Database\Eloquent\Relations\belongsToMany
 */
public function roles() 
{
    return $this->belongsToMany(Role::class);
}
Run Code Online (Sandbox Code Playgroud)

上面是我的 User 模型,下面是我的 Role 模型来定义关系。

 /**
 * provides a many-to-many relationship to User model
 *
 * @return User::class
 */
public function users()
{
  return $this->belongsToMany(User::class);
}
Run Code Online (Sandbox Code Playgroud)

我认为通过将其添加到 User 模型中:

protected $appends = ['role_name'];

public function getRoleNameAttribute()
{
    return $this->attribute['name'];
}
Run Code Online (Sandbox Code Playgroud)

它会返回所有内容,但它所做的只是创建一个 role_name: 'user_name'; 在模型上。所以我想我意识到我正在访问数据库中的用户表而不是角色表,但又不确定该怎么做。任何帮助将不胜感激。

accessor eager-loading mutators laravel

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

Rails 5 Eager 加载然后 find_by

我有以下三个模型:

class Parent < ApplicationRecord
  has_many :children
  has_many :assets
end

class Child < ApplicationRecord
  belongs_to :parent
end

class Asset < ApplicationRecord
  belongs_to :parent
end
Run Code Online (Sandbox Code Playgroud)

现在我需要通过父母找出属于孩子的资产。并且“资产”具有资产类型列。所以我需要做这样的事情

Parent.first.children.each do |child|
  child.parent.assets.find_by(asset_type: "first").asset_value
end
Run Code Online (Sandbox Code Playgroud)

如何避免 N+1 查询?

导轨:5.1.6

红宝石:2.3.4

activerecord ruby-on-rails eager-loading ruby-on-rails-5

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

Laravel 在单个注入模型上进行预加载

我正在尝试在我的项目中使用 Laravel 预加载,并且我已经阅读了有关它的文档。文档中的每个示例都是关于使用预加载获取模型的所有实例。但这只是获取所有实例而不仅仅是单个模型吗?考虑一下:

public function single(Coin $coin)
{
    $coin = $coin->with('exchanges')->get();
    return view('public.coin',compact('coin'));
}
Run Code Online (Sandbox Code Playgroud)

它是一种控制器方法,它使用路由绑定加载单个硬币并注入实例,我正在尝试急切加载该硬币的关系。但是当我在刀片视图文件中访问 $coin 时,我会得到所有硬币的列表。所以我不能急切地加载注入的模型实例?!

eager-loading eloquent laravel-7 laravel-models

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