标签: eager-loading

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
查看次数

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
查看次数

有没有办法急于加载多态关联的关联?

艺术家有很多活动(基本上是用户之间的互动缓存):

class Activity < ActiveRecord::Base

  belongs_to :receiver, :class_name => 'Artist', :foreign_key => :receiver_id #owns the stuff done "TO" him
  belongs_to :link, :polymorphic => true
  belongs_to :creator, :class_name => 'Artist', :foreign_key => :creator_id #person who initiated the activity

end
Run Code Online (Sandbox Code Playgroud)

例如:

  Activity.create(:receiver_id => author_id, :creator_id => artist_id, :link_id => id, :link_type => 'ArtRating') 
Run Code Online (Sandbox Code Playgroud)

我想为每位艺术家创建一个活动流页面,包括不同类型的活动列表,ArtRatings(喜欢,不喜欢),收藏,关注等.

控制器看起来像这样:

class ActivityStreamController < ApplicationController
  def index
    @activities = @artist.activities.includes([:link,:creator,:receiver]).order("id DESC").limit(30)
  end
end
Run Code Online (Sandbox Code Playgroud)

db调用正确地急切地加载多态链接对象:

  SELECT "activities".* FROM "activities" WHERE (("activities"."receiver_id" = 6 OR "activities"."creator_id" = 6)) ORDER BY …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails polymorphic-associations eager-loading

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

使用DbContext.Database.SqlQuery在EntityFramework中加载

在EF 4,我可以通过编写SQL做导航性能的渴望装载DbContext.Database.SqlQueryDbContext.Set<T>().SqlQuery?我似乎没有填充我的导航属性.

编辑

看来我可以使用DbContext.Set()进行eagerloading.SqlQuery,而不是DbContext.Database.SqlQuery.知道为什么吗?

t-sql eager-loading entity-framework-4.1

8
推荐指数
1
解决办法
3882
查看次数

如何使用MySQL Connector/NET在深度为2的对象图上使用Entity Framework?

以下是Oracle确认的错误报告:http://bugs.mysql.com/bug.php?id = 67183

情况

.Include我在我的存储库中使用链时,我注意到我得到了奇怪的结果 - 主要是被查询的值是从错误的字段返回的(例如,名称最终会出现在描述中 - 但在数据库中所有的值都是正确,他们只在查询后显示错误).我更改了名称,因此关系更加明显,但结构是一样的.我一直在为相关的CrewMember及其相对排名和清除得到错误的值.看起来如果CrewMember中的字段名称与Rank相同,则Rank中该字段的值将变为CrewMember中的值.例如,如果Rank有描述,CrewMember也是如此,那么CrewMember的Rank描述将是CrewMember的描述.

当由于MySQL Connector/NET sql提供程序无法正确形成join语句而导致类似字段定义时,实体框架无法在2的深度进行格式良好的查询.

定义

这是一个为数据库表建模的类定义.我正在使用C#ASP.NET MVC 3与Entity Framework 4.1和MySQL Connector/NET 6.5版

public class Harbor
{
 public int HarborId { get; set; }
 public virtual ICollection<Ship> Ships { get; set; }
 public string Description { get; set; }
}

public class Ship
{
 public int ShipId { get; set; }
 public int HarborId { get; set; }
 public virtual Harbor Harbor { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# mysql linq eager-loading entity-framework-4.1

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

在返回json'd数据时卸载"急切加载"属性导致问题

希望标题有意义,我会尽力描述我的问题.

我目前正在开发ASP.NET Web API.在我的"公司"控制器中,我有一个GetCompany()动作.

    /// <summary>
    /// Gets the 'Authorization-Token' request header and finds the company with the
    /// matching decrypted token from the database, returns it; if null, returns 404
    /// </summary>
    /// <returns>Matching company for token passed in request or 404 if null</returns>
    [HttpGet][ResponseType(typeof(Company))]
    [Route("api/company/")]
    public HttpResponseMessage GetCompany() {
        string token = Request.Headers.GetValues("Authorization-Token").First();

        ICollection<Company> companies;
        Company c;
        using (BaseRepository r = new BaseRepository()) {
            companies = r.Get<Company>(null, null, null);
            c = companies.Where(cm => RSA.Decrypt(cm.Token) == token).FirstOrDefault<Company>();
        }
        if …
Run Code Online (Sandbox Code Playgroud)

c# json eager-loading asp.net-web-api2

8
推荐指数
1
解决办法
1838
查看次数

SQLAlchemy:急切加载关系的关系的关系

我有这样的结构:

class User(DeclarativeBase):
   ...
   teamMemberships = orm.relationship("TeamXREF",backref="user",lazy = "dynamic")


class TeamXREF(DeclarativeBase):
   ...


class Team(DeclarativeBase):
   ...
   name=db.Column(String)
   teamMembers = orm.relationship("TeamXREF",backref="team",lazy = "dynamic")
Run Code Online (Sandbox Code Playgroud)

但是,我无法设法写入 1 个查询(我总是以循环和多个查询结束)来立即加载所有这些信息:

  • 用户.teamMemberships
  • 用户.teamMemberships.team
  • 用户.teamMemberships.team.teamMembers
  • user.teamMemberships.team.teamMembers.user

python sqlalchemy eager-loading

8
推荐指数
1
解决办法
7950
查看次数

CDI中@ManagedBean(eager = true)的等价物是什么

众所周知,建议使用注释javax.enterprise.context而不是javax.faces.bean它们被弃用.

我们都发现eager="true"带有@ApplicationScoped from javax.faces.bean和带有@PostConstruct方法的ManagedBeans 对于Web应用程序初始化非常有用,例如:从文件系统读取属性,初始化数据库连接等等...

示例:

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.annotation.PostConstruct;

@ApplicationScoped
@ManagedBean(eager=true)
public class someBean{

    @PostConstruct
    public void init(){
        //Do all needed application initialization.
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如果我使用注释,我怎么能得到相同的行为javax.enterprise.context.

注意: @Startup注释fromjavax.ejb将有助于运行该代码,但仅在应用程序服务器启动时部署webapp时.

jsf java-ee eager-loading cdi managed-bean

8
推荐指数
1
解决办法
4274
查看次数

如何在 EF Core 3.1.3 中禁用延迟加载?

我尝试通过这两种方式禁用延迟加载:

1)

public SqlDbContext(DbContextOptions<SqlDbContext> options) : base(options)
{
     this.ChangeTracker.LazyLoadingEnabled = false;
}
Run Code Online (Sandbox Code Playgroud)

2)

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<SqlDbContext>(options => {
        options.UseSqlServer(Configuration.GetConnectionString("SqlDbContext"));
        options.UseLazyLoadingProxies(false);
});
Run Code Online (Sandbox Code Playgroud)

我在导航中没有使用关键字“虚拟”。

不幸的是,延迟加载仍然有效。我想禁用它,强制我只使用急切加载,因此当我忘记使用 Include() 时会抛出错误。

但是通过这两种方法,查询仍然返回结果。

c# lazy-loading eager-loading entity-framework-core

8
推荐指数
0
解决办法
3400
查看次数

在自引用表中急切地将Linq加载到SQL实体

我有2个相关的Linq to SQL问题.请参阅下面的图片,看看我的模型是什么样的.

问题1

我想知道如何User.AddedByUser在我的User 类/表上加载字段.该字段由字段上的关系生成User.AddedByUserId.该表是自引用的,我试图弄清楚如何让Linq to SQL User.AddedByUser急切地加载属性,即无论何时User加载/获取任何实体,它还必须获取User.AddedByUser和User.ChangedByUser.但是,据我所知,这可能会成为一个递归问题......

更新1.1:

我试过使用DataLoadOptions如下:

var options = new DataLoadOptions();
options.LoadWith<User>(u => u.ChangedByUser);
options.LoadWith<User>(u => u.AddedByUser);

db = new ModelDataContext(connectionString);
db.LoadOptions = options;
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我在第2行得到以下异常:

System.InvalidOperationException occurred
  Message="Cycles not allowed in LoadOptions LoadWith type graph."
  Source="System.Data.Linq"
  StackTrace:
       at System.Data.Linq.DataLoadOptions.ValidateTypeGraphAcyclic()
       at System.Data.Linq.DataLoadOptions.Preload(MemberInfo association)
       at System.Data.Linq.DataLoadOptions.LoadWith[T](Expression`1 expression)
       at i3t.KpCosting.Service.Library.Repositories.UserRepository..ctor(String connectionString) in C:\Development\KP Costing\Trunk\Code\i3t.KpCosting.Service.Library\Repositories\UserRepository.cs:line 15
  InnerException:
Run Code Online (Sandbox Code Playgroud)

异常是不言自明的 - 对象图不允许是循环的.另外,假设第2行没有抛出异常,我很确定第3行会,因为它们是重复键.

更新1.2:

以下内容也不起作用(不与上面的Update 1.1结合使用):

var query = from u …
Run Code Online (Sandbox Code Playgroud)

c# eager-loading linq-to-sql self-reference

7
推荐指数
1
解决办法
5318
查看次数