軟體工程師的小事:到底要不要 Close

將既有 EFCore 升級成 EF Core 3 呼叫 GetDbConnection 轉型成 SqlConnection 會回傳 null 的問題

原本使用 EF Core 2.x 版本有一段程式碼為將 DbConnection 轉型成 SqlConnection,進行 SqlClient 的 ADO.NET 操作

程式碼片段如下

//使用 DbContext 取得資料庫 DbConnection 物件後
var _conn = DbContext.Database.GetDbConnection() as SqlConnection;
var _cmd = _conn.CreateCommand();

但更新成 EF Core 3 後

將 GetDbConnection() 回傳物件的轉型 SqlConnection 物件就變成 null

var _conn = DbContext.Database.GetDbConnection() as SqlConnection;
var _cmd = _conn.CreateCommand();

//_conn 物件會是 null, 產生 NullReferenceException

原因如下

https://www.ithome.com.tw/news/130630

將參考移除後發現 using 建議有兩個命名空間,才發現這篇文章

在 EF Core 3 的版本後 SqlConnection 命名空間
由原本的 System.Data.SqlClient 變更為 Microsoft.Data.SqlClient

將命名空間更新為 Microsoft.Data.SqlClient 就可以正確進行操作

留言