2019/11/23

在EF中執行SQL查詢 (Execute Raw SQL Queries in Entity Framework)

EF(Entity Framework)是微軟提供的佛心ORM工具,讓菜鳥開發人員得以在操作後端資料庫時,可以在Visual Studio中以物件的方式選擇資料庫內的表格與欄位,減少手動組合SQL指令發生的錯誤。但若資料庫因正規劃切割成數十個表格,或者主索引鍵規劃不良、有許多子查詢時,檢查EF組合出的SQL語法,其時間成本可能遠遠超過原來所預期。

遇到這種情形,筆者可能會選擇設計View、資料表函數或者預存程序,在EF內加入此物件。但要記得回傳的查詢結果必須要有Key值。

另一種情形是開發者無法(或沒有權限)在DB上新增物件。可能的方案是直接在EF下 SQL語法。從舊有的程式翻修時,會遇到有複雜join的情形,靠EF Mapping可能會有錯。這時候可以手動帶參數進去。

using (var ctx = new SchoolDBEntities())
{
    var student = ctx.Students
                    .SqlQuery("Select * from Students where StudentId=@id", new SqlParameter("@id", 1))
                    .FirstOrDefault();
}
但這樣的sql如果選取的欄位名稱與EF內的物件名稱衝突,還是會產生Exception。

沒有留言:

張貼留言