Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架上下文加载不正确_C#_.net_Entity Framework - Fatal编程技术网

C# 实体框架上下文加载不正确

C# 实体框架上下文加载不正确,c#,.net,entity-framework,C#,.net,Entity Framework,在下面的代码片段中,我将在select的返回处放置一个制动点 在这种情况下,断点被正确命中 context.campaigns .Include("adgroups") .Include("campaigntimeranges") .ToList()

在下面的代码片段中,我将在select的返回处放置一个制动点

在这种情况下,断点被正确命中

                         context.campaigns
                         .Include("adgroups")
                         .Include("campaigntimeranges")
                         .ToList()
                         .Where(p=> p.LastUpdate < fromDate && 
                                    p.campaigntimeranges.OrderByDescending(q => q.EntryDate).FirstOrDefault().DateStart >= fromDate && 
                                    p.campaigntimeranges.OrderByDescending(q => q.EntryDate).FirstOrDefault().DateStart <= currentDate
                               )
                         .ToList().Select(x => { 
                             return x; //Breakpoint here
                         }).ToList();
context.com
.包括(“广告集团”)
.包括(“活动时间范围”)
托利斯先生()
.Where(p=>p.LastUpdateq.EntryDate).FirstOrDefault().DateStart>=fromDate&&
p、 campaigntimeranges.OrderByDescending(q=>q.EntryDate).FirstOrDefault().DateStart{
返回x;//此处为断点
}).ToList();
在这种情况下(.ToList()被删除),断点永远不会被命中

                         context.campaigns
                         .Include("adgroups")
                         .Include("campaigntimeranges")
                         .Where(p=> p.LastUpdate < fromDate && 
                                    p.campaigntimeranges.OrderByDescending(q => q.EntryDate).FirstOrDefault().DateStart >= fromDate && 
                                    p.campaigntimeranges.OrderByDescending(q => q.EntryDate).FirstOrDefault().DateStart <= currentDate
                               )
                         .ToList().Select(x => { 
                             return x; //Breakpoint here
                         }).ToList();
context.com
.包括(“广告集团”)
.包括(“活动时间范围”)
.Where(p=>p.LastUpdateq.EntryDate).FirstOrDefault().DateStart>=fromDate&&
p、 campaigntimeranges.OrderByDescending(q=>q.EntryDate).FirstOrDefault().DateStart{
返回x;//此处为断点
}).ToList();
我希望我可以使用第一个有效的示例,但是.ToList()之后的任何内容都没有加载到上下文中,因此第一个示例将生成所有“活动”的集合

这是为什么?我该如何解决


感谢

函数lambda inside
Select
函数未被调用,因为(注意!)它未在应用程序中执行。实体框架将此表达式转换为SQL表达式,然后在SQL server中执行

当您添加对
ToList
函数的调用时,它强制EF执行查询并返回结果
ToList
返回一个
列表
,因此在应用程序中执行
Select
,您可以使用断点中断该列表

context.campaigns.Where(/*condition*/).Select(/*selector*/); // returns IQueryable<T>
// IQueryable is translated into a SQL statement

var campaigns = context.campaigns.Where(/*condition*/).ToList(); // Returns List<T>
campaign.Select(/*selector*/); // campaign is a List<T>, and Select is not not translated to SQL, but executed directly
context.campeting.Where(/*条件*/)。选择(/*选择器*/);//返回IQueryable
//IQueryable被转换为SQL语句
var-campaings=context.campaings.Where(/*条件*/).ToList();//返回列表
活动。选择(/*选择器*/);//活动是一个列表,Select不会转换为SQL,而是直接执行

函数lambda inside
Select
函数未被调用,因为(注意!)它未在应用程序中执行。实体框架将此表达式转换为SQL表达式,然后在SQL server中执行

当您添加对
ToList
函数的调用时,它强制EF执行查询并返回结果
ToList
返回一个
列表
,因此在应用程序中执行
Select
,您可以使用断点中断该列表

context.campaigns.Where(/*condition*/).Select(/*selector*/); // returns IQueryable<T>
// IQueryable is translated into a SQL statement

var campaigns = context.campaigns.Where(/*condition*/).ToList(); // Returns List<T>
campaign.Select(/*selector*/); // campaign is a List<T>, and Select is not not translated to SQL, but executed directly
context.campeting.Where(/*条件*/)。选择(/*选择器*/);//返回IQueryable
//IQueryable被转换为SQL语句
var-campaings=context.campaings.Where(/*条件*/).ToList();//返回列表
活动。选择(/*选择器*/);//活动是一个列表,Select不会转换为SQL,而是直接执行

函数lambda inside
Select
函数未被调用,因为(注意!)它未在应用程序中执行。实体框架将此表达式转换为SQL表达式,然后在SQL server中执行

当您添加对
ToList
函数的调用时,它强制EF执行查询并返回结果
ToList
返回一个
列表
,因此在应用程序中执行
Select
,您可以使用断点中断该列表

context.campaigns.Where(/*condition*/).Select(/*selector*/); // returns IQueryable<T>
// IQueryable is translated into a SQL statement

var campaigns = context.campaigns.Where(/*condition*/).ToList(); // Returns List<T>
campaign.Select(/*selector*/); // campaign is a List<T>, and Select is not not translated to SQL, but executed directly
context.campeting.Where(/*条件*/)。选择(/*选择器*/);//返回IQueryable
//IQueryable被转换为SQL语句
var-campaings=context.campaings.Where(/*条件*/).ToList();//返回列表
活动。选择(/*选择器*/);//活动是一个列表,Select不会转换为SQL,而是直接执行

函数lambda inside
Select
函数未被调用,因为(注意!)它未在应用程序中执行。实体框架将此表达式转换为SQL表达式,然后在SQL server中执行

当您添加对
ToList
函数的调用时,它强制EF执行查询并返回结果
ToList
返回一个
列表
,因此在应用程序中执行
Select
,您可以使用断点中断该列表

context.campaigns.Where(/*condition*/).Select(/*selector*/); // returns IQueryable<T>
// IQueryable is translated into a SQL statement

var campaigns = context.campaigns.Where(/*condition*/).ToList(); // Returns List<T>
campaign.Select(/*selector*/); // campaign is a List<T>, and Select is not not translated to SQL, but executed directly
context.campeting.Where(/*条件*/)。选择(/*选择器*/);//返回IQueryable
//IQueryable被转换为SQL语句
var-campaings=context.campaings.Where(/*条件*/).ToList();//返回列表
活动。选择(/*选择器*/);//活动是一个列表,Select不会转换为SQL,而是直接执行

谢谢,你说得对,但我上面写的是为了测试东西。。真正的问题是,尽管我可以看到查询是正确的(由被命中的断点指示),但上下文中没有填充结果。
Select
查询的一部分不能归咎于您没有得到结果。应该使用它来选择列,选择哪些行取决于
Where
part。要对此进行调试,请打开SQL Server Profiler(SSMS工具菜单中有链接),开始监视并执行查询。当您在.NET中执行查询时,您应该在探查器中看到SQL语句。尝试在SSMS中手动执行它,并在那里调试为什么没有得到任何结果。谢谢,你是对的,但我上面写的是供我测试的