Entity Framework Code First を使用したソフト削除フィルター
Entity Framework Code First では、エンティティにマークを付けることでソフト削除を使用してエンティティを「削除」できます。実際にデータベースから削除するのではなく、削除されたものとして扱います。これは、誤って削除することを防止したり、履歴データを維持したりするシナリオに役立ちます。
論理的な削除に関する課題の 1 つは、データを取得するときに、論理的に削除されたエンティティをどのように自動的に除外するかです。これは、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);
以上がEntity Framework コードで最初に論理的な削除フィルターを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。