我有一个具有引用其他实体的属性的实体(示例中为ReferenceEntity).
使用HQL,我可以这样做:
select e.ReferenceEntity from Entity e where e.Id = :entityId
Run Code Online (Sandbox Code Playgroud)
NHibernate会给我一个没有懒惰的ReferenceEntity实例.
通过im尝试查询执行此操作:
Session.QueryOver<Entity>()
.Where(e => e.Id == entityId)
.Select(e => e.ReferenceEntity)
.SingleOrDefault<ReferenceEntity>()
Run Code Online (Sandbox Code Playgroud)
使用QueryOver Nhibernate给了我ReferenceEntity但是懒惰.
我想通过查询来获得ReferenceEntity和eager加载,就像我使用hql一样.
谢谢
我试图让带有约束的Eager-Loading嵌套关系起作用.每个人似乎都给出了热切加载嵌套关系的相同示例:
$users = User::with('posts.comments')->get();
Run Code Online (Sandbox Code Playgroud)
我想做的是获取与给定id的帖子相关的所有用户.但与此同时,我也希望得到与该帖子相关的评论.
在4.1中,我实现了后者,我可以这样做:
$comments = Comment::whereHas('post', function($query) { $query->whereId(1); })->get();
Run Code Online (Sandbox Code Playgroud)
有没有办法结合这两个并约束嵌套关系?
我在使用Dagger 2依赖注入框架时遇到了麻烦.我想创建一个EagerSingleton.我假设当我使用@Singleton注释时,匕首2会创建延迟加载的单例.如何使用Dagger 2框架创建EagerSingleton?
使用多态关联时,是否可以在仅存在于某些类型中的子模型上运行包含?
例:
class Container
belongs_to :contents, :polymorphic => true
end
class Food
has_one :container
belongs_to :expiration
end
class Things
has_one :container
end
Run Code Online (Sandbox Code Playgroud)
在视图中我想要做的事情如下:
<% c = Containers.all %>
<% if c.class == Food %>
<%= food.expiration %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
因此,当我加载c时,我想急切加载到期,因为我知道我将需要最后一个.有没有办法这样做?只定义一个常规:include得到我的错误,因为并非所有封闭类型都有子模型到期.
ruby-on-rails include polymorphic-associations eager-loading rails-activerecord
我正在创建一个使用nhibernate和paging的mvc应用程序.我有一个父>子关系,我试图加载我的孩子记录.这一切都很好.
我遇到的问题是分页.我想每页有15个项目.如果每个父母只有一个孩子,这种方法很有效.问题是父母有多于一个孩子.例如,如果父级有2个子记录,则数据库实际上选择15个记录,其中两个代表同一个父级,一个用于两个子级中的每一个.因此,在我的页面数据视图中,似乎只有14条记录.
有没有人知道如何在父母仍然渴望加载我的孩子实体的情况下如何通过父母获取我的页面数量?
这将是一个面向公众的网站,所以我认为延迟加载不是一个好主意,因为它会导致太多的服务器访问.
是否有内置于NHibernate中的内容可能会解决这个问题,我错过了?
谢谢你的任何想法.
我有以下ActiveRecord模型:
class Person
belongs_to :favourite_car, class_name: 'Car'
belongs_to :business_car, class_name: 'Car'
belongs_to :home_car, class_name: 'Car'
end
Run Code Online (Sandbox Code Playgroud)
当我想访问所有这三个关联时,它会生成三个选择查询:
SELECT * FROM cars WHERE cars.id = ?
Run Code Online (Sandbox Code Playgroud)
这基本上是N + 1问题.
理想情况下,我希望它只生成一个表单查询
SELECT * FROM cars WHERE cars.id IN (?, ?, ?)
Run Code Online (Sandbox Code Playgroud)
我可以将它移动到has_many :through => :join_table与连接表中的列的关联,以指示关联类型是什么,然后用于includes([:join_table, :cars])急切加载关联.但是,在这种情况下,它只将3个查询减少到2,并引入了一个额外的表.
另一种可能的解决方案是手动加载关联,如下所示:
module EagerLoader
def eager_load(*associations)
reflections = associations.map { |association| self.class.reflections[association.to_sym] }
raise 'Not all are valid associations' if reflections.any?(&:nil?)
reflections.group_by { |association| association.klass }.each do |klass, …Run Code Online (Sandbox Code Playgroud) 我的rails应用程序有问题.从Rails 3到4更新后.当我在开发模式下启动服务器后浏览页面时,一切都很好.
但是在单个代码更改(甚至添加空格)之后,每个页面请求都会显示以下错误.
无法自动加载常量用户,预期/path/to/my/rails-app/app/models/user.rb来定义它
该文件完全存在于那里并定义了类:
class User < ActiveRecord::Base
…
Run Code Online (Sandbox Code Playgroud)
我尝试了很多事情config.autoload_paths,并 config.eager_load_paths在application.rb,但没有运气.停用弹簧也没有帮助.
开发应用程序并在每次更改后都必须重新启动服务器才能达到90秒.
$ rails -v
Rails 4.2.4
$ ruby -v
ruby 2.1.7p400 (2015-08-18 revision 51632) [x86_64-linux]
Run Code Online (Sandbox Code Playgroud)
一些相关的配置:
development.rb
MyApp::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用Entity Framework 7和存储库模式.
存储库上的GetById方法支持对子实体的急切加载:
public virtual TEntity GetById(int id, params Expression<Func<TEntity, object>>[] paths)
{
var result = this.Set.Include(paths.First());
foreach (var path in paths.Skip(1))
{
result = result.Include(path);
}
return result.FirstOrDefault(e => e.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
使用如下检索产品(其ID为2)以及订单和与该产品关联的部件:
productRepository.GetById(2, p => p.Orders, p => p.Parts);
Run Code Online (Sandbox Code Playgroud)
我想增强此方法以支持嵌套深度超过一个级别的实体的预先加载.例如,假设a Order有自己的LineItem's 集合.
在EF7之前,我相信以下内容也可以检索与每个订单关联的LineItem:
productRepository.GetById(2, p => p.Orders.Select(o => o.LineItems), p => p.Parts);
Run Code Online (Sandbox Code Playgroud)
但是,EF7似乎不支持这一点.相反,有一个新的ThenInclude方法可以检索其他级别的嵌套实体:
https://github.com/aspnet/EntityFramework/wiki/Design-Meeting-Notes:-January-8,-2015
我不确定如何更新我的存储库以支持使用多个级别的预先加载的实体进行检索ThenInclude.
c# entity-framework repository-pattern eager-loading entity-framework-core
我在一个正在维护的Rails应用程序中遇到了以下行:
Rails.application.eager_load!
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了它,但没有找到任何真正说明它的功能.它有什么作用?
我有两个数据库表:
帖子
$table->increments('id');
$table->integer('country_id')->unsigned();
$table->foreign('country_id')->references('id')->on('countries');
Run Code Online (Sandbox Code Playgroud)
国家
$table->increments('id');
$table->string('name', 70);
Run Code Online (Sandbox Code Playgroud)
我使用laravel作为后端.现在我想为我的前端实现过滤数据.因此,用户可以选择国家/地区名称,而laravel应仅使用具有指定名称的国家/地区的帖子来回答请求.
如何将此条件添加到我现有的分页查询中?我试过这个:
$query = app(Post::class)->with('country')->newQuery();
// ...
if ($request->exists('country')) {
$query->where('country.name', $request->country);
}
// ...
Run Code Online (Sandbox Code Playgroud)
...导致以下错误:
Column not found: 1054 Unknown column 'country.name' in 'where clause' (SQL: select count(*) as aggregate from `posts` where `country`.`name` = Albania)
Run Code Online (Sandbox Code Playgroud) eager-loading ×10
eloquent ×2
nhibernate ×2
c# ×1
dagger-2 ×1
include ×1
laravel ×1
laravel-4 ×1
laravel-5 ×1
lazy-loading ×1
pagination ×1
php ×1
queryover ×1
ruby ×1
select ×1
singleton ×1