[C#.NET][Entity Framework] Custom SQL Command at EF6.1.3
EF 除了可以使用 LINQ 查詢,也可以使用 SQL 查詢語法,EF 預設提供兩種方式
- 不快取查詢 Database.SqlQuery
- 快取查詢 DbSet.SqlQuery
資料異動使用 Database.ExecuteSqlCommand
Database.SqlQuery 的使用這裡有一點必須要注意,當指定型別時,Select 欄位必須要與指定型別一模一樣,不能短缺,如下圖,Order_Detail 有五個欄位,但我只有 Select OrderID,VS就會賞你個例外,這使用起來超卡的..
下面範例是一個簡單的例子,實作過程中碰了不少牆
查出有幾筆資料,然後動態組合 Delete 命令
北風資料庫:https://dotblogsfile.blob.core.windows.net/user/yc421206/1503/201531115108869.zip
public void SqlCommand_Delete_Test() { using (NorthWindDbContext db = new NorthWindDbContext()) { var orderID = 11106; var orderDetails = db.Database.SqlQuery<OrderDetailView> (@"SELECT od.ProductID,OrderID FROM [Order Details] od WHERE od.OrderID=@p0", orderID); StringBuilder sb = new StringBuilder(); int id = 1; List<object> parameters = new List<object>() { 11106 }; foreach (var item in orderDetails) { sb.Append(string.Format(@" DELETE [dbo].[Order Details] WHERE (([OrderID] = @p0) AND ([ProductID] = @p{0}))", id)); parameters.Add(item.ProductID); id++; } db.Database.ExecuteSqlCommand(sb.ToString(), parameters.ToArray()); } }
執行結果如下:
本文出自:http://www.dotblogs.com.tw/yc421206/archive/2015/03/11/150701.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET