Entity Framework での論理的に削除されたエンティティの自動フィルター処理
Entity Framework Code First を使用する場合、「論理的な削除」は一般的な方法です。実際にデータベースからエンティティを削除せずに、エンティティを削除済みとしてマークできるようにします。このアプローチでは、非アクティブなエンティティをクエリから論理的に除外しながら、履歴データを維持します。
質問で示されているように、論理的な削除を実現するには、DbContext の SaveChanges メソッドにカスタム ロジックを実装できます。これにより、エンティティは ISoftDelete インターフェイスを実装し、エンティティに削除済みとしてマークを付ける「Delete」メソッドが確保されます。
論理的に削除されたエンティティの取得の自動化
ただし、さらに疑問が生じます。データを取得するときに、論理的に削除されたエンティティを自動的に無視する方法を尋ねます。解決策は、関連するすべてのクエリに自動的に適用されるグローバル フィルターを作成するエレガントな方法を提供するライブラリである Entity Framework Dynamic Filters を使用することです。
EntityFramework.DynamicFilters の実装
この機能を実装するには、次の手順に従ってください手順:
たとえば、「IsDeleted」フィルターの場合:
modelBuilder.Filter("IsDeleted", (ISoftDelete d) => d.IsDeleted, false);
使用法
フィルターが定義されると、すべてISoftDelete インターフェイスを実装するエンティティに対するクエリには、where 句「where IsDeleted = false」が自動的に含まれます。これにより、追加のコードを必要とせずに、論理的に削除されたエンティティが結果セットから透過的に除外されます。
注
EntityFramework.DynamicFilters によって提供される Filter メソッドは、複雑なフィルター条件をサポートしており、ナビゲーション プロパティにも適用できます。このライブラリを利用することで、開発者は論理的な削除の柔軟性を維持しながら、データの取得を簡素化できます。
以上がEntity Framework で論理的に削除されたエンティティを自動的に除外するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。