EF v6.1.3對於執行多筆批次修改的SQL命令(UPDATE Table1 SET ItemType=2 WHERE ItemId > 5),還是得一筆一筆執行,網上很多套Update Extensions可供使用,比較有名的就是「EntityFramework.Extended」:
PM> Install-Package EntityFramework.Extended
在多筆修改部分,它使用INNER JOIN方式來綁定ID修改欄位,雖然不及原生SQL語法簡潔,但還能接受,而且它能強制更新指定欄位,比起用EF內建的Attach(entity)方式更方便,強制更新指定欄位,不需再注意Old/New Values差異可能造成的BUG地雷,。using EntityFramework.Extensions;
var listId = new List{ 1, 2, 3 };
dbContext.Entries.Where(x => listId.Contains(oldEntry.LogId)).Update(
expr => new CMS_Log {
LogType = "123",
LogLevel = 0
}
);
dbContext.SaveChanges();
在多筆刪除部分,EF v6已支援內建RemoveRange(entities)來多筆刪除,也可以使用外掛的Extension Update()更是簡潔。
using EntityFramework.Extensions;
dbContext.Entries
.Where(x => x.LogId > 15 && x.LogId < 20)
.Delete();
dbContext.SaveChanges();
外掛Extension函式產生的SQL都有點冗長,但在不使用原生SQL Text下,就將就用吧! 總比起EF得下N筆SQL指令的方式更具高效率了。此外,EF BulkInsert大量新增操作的效能提升,又是另一話題了。
No comments:
Post a Comment