[英]Entity Framework - Deleting Split entity is not attached and it was not loaded by the same context instance
[英]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.