當前位置: 妍妍網 > 碼農

EntityFramework-Plus: 讓 EF Core 如虎添翼

2024-04-02碼農

Entity Framework Plus

Entity Framework Plus 是一個用於增強 EF6 和 EF Core 的免費開源庫。它對您的資料庫上下文 DbContext 進行了擴充套件,包括過濾器、稽核、緩存、批次刪除、批次更新等。

功能特性

批次刪除

使用 LINQ 直接刪除實體,並需在上下文中載入實體。支持設定批次處理大小來提高效能。

// 刪除所有 2 年內不活動的使用者
var date = DateTime.Now.AddYears(-2);
ctx.Users.Where(x => x.LastLoginDate < date)
.Delete();
// 使用 BatchSize 進行刪除
var date = DateTime.Now.AddYears(-2);
ctx.Users.Where(x => x.LastLoginDate < date)
.Delete(x => x.BatchSize = 1000);

批次更新

// 更新所有兩年內不活動的使用者
var date = DateTime.Now.AddYears(-2);
ctx.Users.Where(x => x.LastLoginDate < date)
.Update(x => new User() { IsSoftDeleted = 1 });

查詢過濾

下面的範例中,過濾了軟刪除記錄

QueryFilterManager.Filter<Post> 
(q => q.Where(x => !x.IsSoftDeleted)); 
var ctx = new EntitiesContext(); 
// SELECT * FROM Post WHERE IsSoftDeleted = false 
var list = ctx.Posts.ToList();

查詢緩存

查詢的結果從緩存中返回,如果查詢時沒有緩存,會查詢資料庫並進行緩存。

可以指定緩存策略和緩存標簽來控制緩存過期。

// (EF5 | EF6) 2 個小時的查詢緩存
var states = ctx.States.Where(x => x.IsActive).FromCache(DateTime.Now.AddHours(2));

// 兩個小時的滑動過期
var options = new MemoryCacheEntryOptions() { SlidingExpiration = TimeSpan.FromHours(2)};
var states = ctx.States.Where(x => x.IsActive).FromCache(options);

計畫地址

https://github.com/zzzprojects/EntityFramework-Plus

分享

點收藏

點點贊

點在看