[C#.NET][Entity Framework] Custom SQL Command at EF6.1.3

[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就會賞你個例外,這使用起來超卡的..

image

 

下面範例是一個簡單的例子,實作過程中碰了不少牆

查出有幾筆資料,然後動態組合 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());
            }
        }

 

 

 

執行結果如下:

image

 


本文出自:http://www.dotblogs.com.tw/yc421206/archive/2015/03/11/150701.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo