想說順便把專案升級到 core 8.0,EF也升到 8.0
結果發生一些狀況,這邊紀錄一下
1. mssql 連線字串要有 TrustServerCertificate=True 這段文字
2. 6.0 與 8.0 有點天差地遠,轉過來時要把 Models 整個重新 build (scaffold 指令)
3. 因為資料庫也改名,所以整個專案 DBCntext 的名稱要整個調一遍
4. 然後因為資料庫是從舊專案複製過來,但因為 EF8.0關係,資料庫也要做升級
COMPATIBILITY_LEVEL 等級要大於等於 130 以上
所以要下這個 SQL 指令
ALTER DATABASE YourDBName SET COMPATIBILITY_LEVEL = 130;
至於為何要把 COMPATIBILITY_LEVEL 改 130 以上,主要是因為 會用到 MS SQL 的 OPENJSON 功能
btw, 發現 EF 轉 SQL 指令,會跟原本想像的不一樣,原來他是把 陣列用 JSON 方式帶進 SQL
_dbContext.V_Storage.AsNoTracking().Where(x => successIds.Contains(x.Id) && x.Is_Deleted == "N").ToList();
結果轉出
[Parameters=[@__successIds_0='?' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SELECT [v].* (省略列舉欄位)
FROM [V_Storage] AS [v]
WHERE [v].[Id] IN (
SELECT [s].[value]
FROM OPENJSON(@__successIds_0) WITH ([value] int '$') AS [s]
) AND [v].[Is_Deleted] = 'N'
而不是 IN ('A','B','C' ..))