簡體   English   中英

實體框架核心 Linq 查詢無法轉換為正確的 SQL 語句

[英]Entity Framework Core Linq query doesn't translate to correct SQL statements

所以我正在調試我們使用 Entity Framework Core 2.1.14 的應用程序。 我首先通過腳手架從數據庫創建了我的實體。 數據庫是 MySQL 5.7.29,EF Core 的 SQL 數據提供程序是 Oracle 的 MySql.Data.EntityFrameworkCore 8.0.19。

示例:一個簡單的 Linq 查詢應該在后端創建一個正確的 SQL 語句。 然而事實並非如此。 “非活動”是一個字節?

Dim associates = (From a In DatabaseContext.Associate
                  Where a.Inactive = 0
                  Select a.AssociateId).ToList()

這個簡單的 Linq 查詢返回: SELECT `a`.`Inactive`, `a`.`AssociateID` FROM `associate` AS `a` 所以基本上它會下載所有關聯並在 memory 中執行“位置”並返回值。 我知道根據文檔,一些查詢可能很復雜並且無法翻譯,但這是最簡單的簡單查詢。 是因為 Inactive 列可以為空嗎? 有什么可怕的不對。

僅供參考:EF Core 位於 class 庫中,即 C#。 VB 代碼位於另一個引用 class 庫的 VB 項目中。

嗯,似乎答案是使查詢在 VB 中更具體。 我猜 C# class 庫和 VB 項目之間的查詢轉換似乎是問題所在。

Dim associates = (From a In DatabaseContext.Associate
                  Where a.Inactive.Value = Convert.ToByte(0)
                  Select a.AssociateId).ToList()

這提供了正確的查詢:

SELECT `a`.`AssociateID`
FROM `associate` AS `a`
WHERE `a`.`Inactive` = 0

很奇怪,在 C# 中,您不必檢查 .Value 並將 0 轉換為字節,但在 VB 中我必須這樣做,沒有其他方法可以讓它工作。 感謝所有試圖幫助解決此問題的人。

暫無
暫無

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

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