使用Entity Framework Code First 進行軟刪除過濾
在Entity Framework Code First 中,軟刪除允許您透過標記實體來「刪除”實體刪除而不是實際從資料庫中刪除它們。這對於您想要防止意外刪除或維護歷史資料的場景非常有用。
軟體刪除的一個挑戰是如何在擷取資料時自動過濾掉軟體刪除的實體。這可以使用 EntityFramework.DynamicFilters 套件來實作。
EntityFramework.DynamicFilters
EntityFramework.DynamicFilters 是一個庫,它提供了一種用於創建自動應用的全域過濾器的機制來查詢。這些過濾器可以套用於實體的任何屬性,包括導航屬性。
要使用 EntityFramework.DynamicFilters,您需要:
public override int SaveChanges(bool acceptAllChangesOnSuccess) { // Soft delete implementation here return base.SaveChanges(acceptAllChangesOnSuccess); }
modelBuilder.Filter("IsDeleted", (ISoftDelete d) => d.IsDeleted, false);
此過濾器確保針對實作ISoftDelete 介面將自動包含IsDeleted 屬性的 WHERE 子句,不包含 IsDeleted 設定為的實體true。
範例
考慮以下程式碼:
public class User : ISoftDelete { public int Id { get; set; } public string Name { get; set; } public bool IsDeleted { get; set; } } public class DbContext : base.DbContext { public DbSet<User> Users { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Filter("IsDeleted", (User u) => u.IsDeleted, false); } }
使用此配置,以下程式碼將忽略任何已刪除的使用者:
var user = dbContext.Users.FirstOrDefault(u => u.Id == 1);
以上是實體框架程式碼首先如何實現軟刪除過濾?的詳細內容。更多資訊請關注PHP中文網其他相關文章!