标签: eager-loading

在开发中更改代码时"无法自动加载常量用户"错误

我的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_pathsapplication.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)

ruby-on-rails eager-loading ruby-on-rails-4

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

Linq to Entities - 使用Include()急切加载

我有这个非常基本的表结构:

dbo.tblCategory
dbo.tblQuestion(与tblCategory的 多对一关系)
dbo.tblAnswer(与tblQuestion的 多对一关系)

基本上,我正在尝试做的是当我加载一个类别时,我想加载所有问题和所有答案.

现在,我已经能够使用以下代码执行此操作:

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include("tblQuestion")
                                           .Include("tblQuestion.tblAnswers")    
                 where t.Id == id
                 select t).FirstOrDefault();

            return entities.DetachObjectGraph(dto);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我并不完全迷恋于此; 如果关系名称在我的模型中发生变化; 构建项目时我不会遇到错误.理想情况下,我想使用lambda表达式; 这样的事情:

public tblCategory Retrieve(int id)
{
    using (var entities = Context)
    {
        var dto =
            (from t in entities.tblCategory.Include(t => t.tblQuestion)
             where t.Id == id
             select t).FirstOrDefault();

        return entities.DetachObjectGraph(dto);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,使用上面的代码片段; 我坚持如何深入到Answers表.关于我可以用于这个lambda表达式的任何想法?

c# linq-to-entities include eager-loading .net-3.5

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

强制急切加载导航属性

我正在使用EF Code First,我有一个名为Category的导航属性,我想在每个调用中加载:

public class Product
{
    ...
    public Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

要做到这一点,我必须将它包含在我将在Product上进行的所有调用中

var results = from p in db.Products.Include("Category") select p;
Run Code Online (Sandbox Code Playgroud)

有没有办法让Category属性急切加载,因此在每次调用时生成一个SQL连接,而不必每次都包含它?

谢谢

c# entity-framework eager-loading

9
推荐指数
1
解决办法
3058
查看次数

实体框架 - 渴望加载相关实体

对不起,标题不是更具体 - 我不知道如何简洁地描述.我有Trips和Location,它们具有多对多的关系 - 直截了当,除了Locations不需要知道使用它们的Trips.我创建了这些实体来代表这个:

public class Trip
{
    public int TripId { get; set; }
    public virtual IList<TripLocation> TripLocations { get; set; }
}

public class TripLocation
{
    public int TripId { get; set; }
    public int LocationId { get; set; }

    public virtual Location Location { get; set; }
}

public class Location
{
    public int LocationId { get; set; }
    // Note: Intentionally no collection of Trips
}
Run Code Online (Sandbox Code Playgroud)

我可以让Trip快速加载它的TripLocations但我无法让TripLocations急于加载他们的位置.我已经尝试了一些流畅的配置组合和"包含"在查询中,如

IQueryable<Trip> query = from trip in context
                              .Include(r …
Run Code Online (Sandbox Code Playgroud)

entity-framework eager-loading ef-code-first

9
推荐指数
1
解决办法
6671
查看次数

EF Code First:不包括可选关系

我的代码中有一个特定的查询,需要急切加载所有相关的实体(两个 - > 1个FK和 - > N个FK),因为上下文将在此之后处理.

我做了一个通用的"查询"方法,params Expression<Func<MyItem, object>>[] includes然后内部链接它们.那部分工作正常.

查询如下所示:

var item = facade.Query<MyItem>(
                c => c.Childs.Select(x => x.Parent),
                c => c.Childs.Select(x => x.SubChild1),
                c => c.Childs.Select(x => x.SubChildNotWorking),
                c => c.Childs.Select(x => x.SubChild2),
                c => c.Childs.Select(x => x.SubChild3),
                c => c.Childs.Select(x => x.SubChildrens)
                ).FirstOrDefault(c => c.Name == name);
Run Code Online (Sandbox Code Playgroud)

不工作属性的映射(放置在SubChildNotWorking的配置中):

this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);
Run Code Online (Sandbox Code Playgroud)

在所有包含中,只有SubChildNotWorking实际上不起作用.在使用调试器检查返回的对象时,我会在所有属性上看到代理.打开代理为我提供了所有其他关系的正确数据,并为该SubChildNotWorking属性提供了"objectcontext已被处置异常" .

我能够发现的唯一区别是,它SubChildNotWorking是一个可以为空的FK(DB上有可空列和dbcontext中的WithOptional配置),而所有其他都是使用WithRequired配置的不可空FK.

数据库也是一个没有使用Code First创建的遗留数据库而不遵循其约定,我只是在DbContext中进行了映射.其他一切都很好.

我试图找出是否急于加载对可空的FK不起作用,但我找不到任何关于它的文档.

这是一个错误,还是预期的行为?但最重要的是,我该如何解决这个问题呢?

谢谢.

c# entity-framework lazy-loading code-first eager-loading

9
推荐指数
1
解决办法
1551
查看次数

Rails 3急切加载深层嵌套关联

我正在构建一个包含以下流的公共活动流:

  1. 用户发布在3分钟前
  2. 用户主演了一个帖子

我正在使用public_activity gem来实现这一目标.

我的问题是是否有办法使用includes多态函数.

我目前运行的代码如下:

#app/models/post.rb

class Post < ActiveRecord::Base

    include PublicActivity::Common

    attr_accessible :content, :visibility

    validates_presence_of :content

    belongs_to :postable, :polymorphic => true
    has_many     :stars

end

#app/models/star.rb
class Star < ActiveRecord::Base

  include PublicActivity::Common

  validate :duplicate_star

      belongs_to :user
  belongs_to :post

private
    def duplicate_star
 errors.add(:base, "Post already starred") if Star.exists?(:user_id => self.user, :post_id => self.post)
   end

end


#app/controllers/users_controller.rb
class UsersController < ApplicationController
  def index
    @post = Post.new
    @activities = PublicActivity::Activity.order("id desc").all.includes(:trackable, :owner)
  end
end
Run Code Online (Sandbox Code Playgroud)

可跟踪的可以是帖子或明星.我有渲染功能来显示两者.问题是,如果我尝试输出类似{user} starred {postcontent}的内容,它会这样做:

activity.trackable.post.content …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails eager-loading ruby-on-rails-3

9
推荐指数
1
解决办法
4248
查看次数

我可以让SQLAlchemy做子查询急切加载而不重复完整的原始查询吗?

假设我们有原始生成的查询:

SELECT company.x AS company_x, ...
FROM company
LEFT OUTER JOIN acc ON acc.id = company.acc
LEFT OUTER JOIN usercomp_links ON company.id = usercomp_links.pid
LEFT OUTER JOIN usergro_links ON acc.id = usergro_links.pid
WHERE usergro_links.eid = %s OR usercomp_links.eid = %s
Run Code Online (Sandbox Code Playgroud)

如果我们加上.options(subqueryload(Company.childs))这个,我们将得到:

SELECT company.x AS company_x, ..., anon_1.company_id AS anon_1_company_id
FROM (
    SELECT company.id AS company_id
    FROM company
    LEFT OUTER JOIN acc ON acc.id = company.acc
    LEFT OUTER JOIN usercomp_links ON company.id = usercomp_links.pid
    LEFT OUTER JOIN usergro_links ON …
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy eager-loading

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

渴望加载参数 - laravel

我有Banks桌子和单独的桌子services

$bank = Banks::find(1);
echo $bank->service(1); // print bank with that service (serviceId 1)
Run Code Online (Sandbox Code Playgroud)

可以用service_id = 1来急切加载所有银行.有点像

Bank::with('service(1)')->get();
Run Code Online (Sandbox Code Playgroud)

先感谢您

php sql orm eager-loading laravel

9
推荐指数
1
解决办法
2633
查看次数

Rails 4.2自动加载不是线程安全的

我有以下型号:

class User < ActiveRecord::Base
  def send_message(content)
    MessagePoro.new(content).deliver!
  end

  def self.send_to_all(content)
    threads = []
    all.each do |user|
      threads << Thread.new do
        user.send_message(content)
      end
    end
    threads.each(&:join)
  end
end
Run Code Online (Sandbox Code Playgroud)

MessagePoro模型可以很简单,例如app/models/message_poro.rb:

class MessagePoro
  def initialize(content)
    # ...
  end

  def deliver!
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,当我有100个用户,并且我正在运行User.send_to_all("test")时,我有时会遇到更严重的错误:

RuntimeError: Circular dependency detected while autoloading constant MessagePoro
Run Code Online (Sandbox Code Playgroud)

要么:

wrong number of arguments (1 for 0)
Run Code Online (Sandbox Code Playgroud)

我认为它必须是因为没有加载MessagePoro并且所有线程都试图同时加载它,或类似的东西.由于这些错误有时只会发生,我很确定只有当存在"竞争条件"或者有线程时才会出现这种情况.我已经尝试在启动Threads之前初始化MessagePoro,并且我已经使用了eager_loading,但问题似乎仍然存在.还有什么可以尝试缓解这个问题?

multithreading eager-loading ruby-on-rails-4

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

Grails/GORM:lazy:false和fetchMode之间的区别

在Grails/GORM中,static mapping = {xyz lazy: false}&之间有什么区别static fetchMode = [xyz: 'eager']

例:

class Book {
    static belongsTo = [author: Author]
    static mapping   = {author  lazy: false}
    static fetchMode = [author: 'eager']
}
Run Code Online (Sandbox Code Playgroud)

grails lazy-loading grails-orm fetch eager-loading

9
推荐指数
1
解决办法
3282
查看次数