1. 程式人生 > >ASP.NET MVC5+EF6+EasyUI 後臺管理系統(90)-EF 批量操作

ASP.NET MVC5+EF6+EasyUI 後臺管理系統(90)-EF 批量操作

這次我們來看 EntityFramework-Plus(免費開源) 庫的用法相比其他擴充套件庫,這個更加新並且用法更加簡單

這是一個對Entity Framework進行擴充套件的類庫.支援EF EF5, EF6, EF Core,來彌補EF目前的短板

GitHub地址 https://github.com/zzzprojects/EntityFramework-Plus

支援功能:

  • 批量刪除
  • 批量更新

Linq表示式

  • 從快取查詢
  • 延遲載入
  • 過濾查詢

組合查詢功能

1.從NUGET安裝元件就OK

當然你要選擇你對應的版本,並且同時你也安裝了對應版本的EF版本(我選擇EF6的擴充套件,那麼我應該也對應現有的EF6)

 2.操作(批量刪除)

安裝nuget包之後我們會發現我們平時慣用的linq表示式多了一些智慧提示

好吧確實很簡單,刪除顏色是blue條件的所有資料

using (DBContainer ctx = new DBContainer())
{
       ctx.Spl_Product.Where(a => a.Color == "blue").Delete();
}

3.操作(批量更新)

批量更新建立日期3天以前的資料,讓color=red,code=xxxx

using (DBContainer ctx = new DBContainer())
{
      ctx.Spl_Product.Where(a => a.CreateTime < DateTime.Now.AddDays(-3
)).Update(a=> new Spl_Product { Color="red" , Code="xxxx"}); }

4.設定快取

在從快取查詢之前,我們必須引用 System.Runtime.Caching來支援系統快取(而且可以設定快取的時間)

下面來看怎麼設定快取:

複製程式碼
using (DBContainer ctx = new DBContainer())
{
     //查詢資料之後並進行快取
     var list = ctx.Spl_Product.Where(x => x.Code=="red").FromCache();

     // (EF5 | EF6) 讓查詢快取維持2個小時
var list2 = ctx.Spl_Product.Where(x => x.Code=="red").FromCache(DateTime.Now.AddHours(2)); }
複製程式碼

我們在查詢的最後加上.FromCache和.FromCache(DateTime.Now.AddHours(2))來分別設定快取,所以我們在第一次查詢之後就可以設定快取

複製程式碼
  using (DBContainer ctx = new DBContainer())
  {
        // EF Core 的寫法
        var options = new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromHours(2) };
        var states = ctx.Spl_Product.Where(x => x.Color=="red").FromCache(options);
  }
複製程式碼

5.從快取查詢

using (DBContainer ctx = new DBContainer())
{
      //從快取中查詢,如果沒有快取即從資料庫查詢
      var list3 = ctx.Spl_Product.Where(x => x.Code=="red").FromCache("list");
}

注意:.FromCache("list"); list 是第四點設定的快取

6.清空快取

using (DBContainer ctx = new DBContainer())
{
      //清空快取
      QueryCacheManager.ExpireTag(new string[] { "list", "list2" });
}

 7.延遲載入

複製程式碼
using (DBContainer ctx = new DBContainer())
 {
       // 沒有使用快取和延遲載入的寫法
       var count = ctx.Spl_Product.Count();
       // 使用快取
       ctx.Spl_Product.DeferredCount().FromCache();
       // 延遲查詢
       ctx.Spl_Product.DeferredCount().FutureValue();
 }
複製程式碼

似乎上面的七點,看起來使用方式都非常簡單易懂,擴充套件自EF當然只是需要在後面.一下就出來,只需要記得Delete,Update,FromCaChe
下面來說最後一點,這一點比較有趣的,全域性過濾,我們有時實際也是很需要用到的。那麼在什麼時候用下面先來看語句

8.過濾查詢

複製程式碼
//建立全域性過濾
QueryFilterManager.Filter<Spl_Product>(x => x.Where(c => c.IsDel==false));
DBContainer ctx = new DBContainer();
// 讓過濾生效
QueryFilterManager.InitilizeGlobalFilter(ctx);

//以後的使用
//SELECT * FROM Spl_Product WHERE IsDel = true
var customer = ctx.Spl_Product.ToList();
複製程式碼

從上面的結果可以看到我查詢的結果自動加上了IsDel=false,許多場景我們有時候刪除資料是邏輯刪除,並不是物理刪除

這時候我讓所有查詢都是查詢IsDel為假的條件資料,而不用每一個查詢語句都需要去加

似乎EntityFramework-Plus不僅僅能做的如此,他還有很多強大的功能,其他形式的查詢,或者Audit追蹤資料

有興趣進階和原始碼請點選跳轉