簡體   English   中英

實體框架上下文未正確加載

[英]Entity Framework context is incorrectly loaded

在下面的代碼片段中,我將一個brakpoint放置在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();

在這種情況下(.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();

我希望我可以使用第一個可行的示例,但是.ToList()之后的任何內容都不會加載到上下文中,因此第一個會生成所有“廣告系列”的集合。

為什么會這樣,我該如何解決?

謝謝

Select函數內部的函數lambda不會被調用,因為(請注意!)它不會在您的應用程序中執行。 實體框架將此表達式轉換為SQL表達式,然后在SQL Server中執行它。

當您添加對ToList函數的調用時,它將強制EF執行查詢並返回結果。 如您所知, ToList返回一個List<T> ,因此, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM