ASP.NET MVC5+EF6+EasyUI 後臺管理系統(90)-EF 擴展操做

上一篇講了EF直接執行SQL與存儲過程的用 法html

此次咱們來看 EntityFramework-Plus(免費開源) 庫的用法相比其餘擴展庫,這個更加新而且用法更加簡單git

這是一個對Entity Framework進行擴展的類庫.支持EF EF5, EF6, EF Core,來彌補EF目前的短板github

代碼下載地址數據庫

支持功能:

  • 批量刪除
  • 批量更新

Linq表達式

  • 從緩存查詢
  • 延遲加載
  • 過濾查詢

組合查詢功能

1.從NUGET安裝組件就OK

固然你要選擇你對應的版本,而且同時你也安裝了對應版本的EF版本(我選擇EF6的擴展,那麼我應該也對應現有的EF6)緩存

 2.操做(批量刪除)

安裝nuget包以後咱們會發現咱們平時慣用的linq表達式多了一些智能提示spa

好吧確實很簡單,刪除顏色是blue條件的全部數據code

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

3.操做(批量更新)

批量更新建立日期3天之前的數據,讓color=red,code=xxxxhtm

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來支持系統緩存(並且能夠設置緩存的時間)blog

下面來看怎麼設置緩存:get

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追蹤數據

有興趣進階和源碼請點擊跳轉

相關文章
相關標籤/搜索