[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