c# – 实体框架.NET Core 2.0查询在执行子查询时挂起执行

c# – 实体框架.NET Core 2.0查询在执行子查询时挂起执行,第1张

概述使用常规版本的EF 6.x,我可以使用以下查询轻松完成子查询: var q = from u in db.User let actions = from ua in db.UserActions where ua.UserId == u.Id && ua.Approved select ua 使用常规版本的EF 6.x,我可以使用以下查询轻松完成子查询:

var q = from u in db.User        let actions = from ua in db.UserActions                      where ua.UserID == u.ID && ua.Approved                      select ua        where u.Active        select new { User = u,Actions = actions.ToList() }var result = await q.ToListAsync()

当我尝试在我的ASP.NET Core 2.0 EntityFramework驱动的应用程序中执行相同的代码时,我的应用程序只是冻结并且永远不会返回结果.

我尝试了一些变体,但是一旦子查询作为初始查询的一部分执行,它们都会挂起:

>子查询(与上面的相同,有一些变化)
>左外连接

另一个子查询变体(也在执行时挂起):

var q = from u in db.User        let actions = (from ua in db.UserActions                      where ua.UserID == u.ID && ua.Approved                      select ua).ToList()        where u.Active        select new { User = u,Actions = actions }

又一个子查询变体(也在执行时挂起):

var q = from u in db.User        let actions = db.UserActions.Where(ua => ua.UserID == u.ID && ua.Approved)        where u.Active        select new { User = u,Actions = actions.ToList() }

左外连接的另一个变体(也在执行时挂起):

var forUserID = "test";var q = from u in db.User        join ua in db.UserActions on u.ID equals ua.UserID into actions        from ua in action.DefaultIfEmpty()        where u.Active        select new { User = u,Actions = ua}

下面的代码可以工作,但很明显,子查询执行是延迟的,一旦我们尝试访问Action属性,它就会启动另一个查询:

var q = from u in db.User        let actions = from ua in db.UserActions                      where ua.UserID == u.ID && ua.Approved                      select ua        where u.Active        select new { User = u,Actions = actions }var result = await q.ToListAsync()foreach (var r in result){     foreach(var a in r.Actions)     {          // extra database requests is executed for each result row          // .. process action.     }}

如何执行子查询并获取实体列表,其中每个实体分配了子实体列表,使用子查询接收?

解决方法 我不确定.但是,你可以尝试’.ToList()’.

var q = (from u in db.User            join ua in db.UserActions on u.ID equals ua.UserID into actions            from ua in action.DefaultIfEmpty()            where u.Active            select new {u,ua}).ToList();
总结

以上是内存溢出为你收集整理的c# – 实体框架.NET Core 2.0查询在执行子查询时挂起执行全部内容,希望文章能够帮你解决c# – 实体框架.NET Core 2.0查询在执行子查询时挂起执行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1239599.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存