左外連接實體框架核心

c# entity-framework-core

我正在嘗試使用EF7(7.0.0-rc1-final),vNext RC1(rc1-final)和SQL Server 2014執行左外連接請求

數據庫:

寵物:Id,名字

用戶:Id,Name,#PetId

這個工作:

var queryWorks = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     Pet = p
                 };

但這個不起作用(Message =“Sequence contains no elements”):

var queryWorks = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     Pet = p
                 };

SQL Server Profile 2014向我顯示第二個請求未發送到SQL Server。為什麼?

一般承認的答案

我認為這是你的第二個查詢投影中的p.Name沒有處理。

從RC1開始,EF7還不知道如何做左外連接。簡而言之,他們意識到正確的做法是非常重要的,他們正在努力。

據報導,在github上發布了第3186期 ,一些開發者對此進行了評論。

我和另一個像你一樣的repro評論我自己。

合作者“maumar”評論:

問題是在Linq(對象)中,LOJ的概念本身並不存在。

建議的修復是使用SelectMany-GroupJoin-DefaultIfEmpty組合表示可選導航,然後將此模式折疊到我們的關係管道中的LOJ中。問題是,這會產生更複雜的查詢(主要是由於子查詢的引入),並且當前打破了大多數非平凡的情況。在我們通過導航屬性擴展解決問題之前,需要解決這些錯誤。

我們確實認為這是一個高優先級的錯誤,因為它可能會返回錯誤的結果。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因