Filtrage automatique des entités supprimées de manière logicielle dans Entity Framework
Lorsque vous travaillez avec Entity Framework Code First, la « suppression logicielle » est une pratique courante qui permet aux entités d'être marquées comme supprimées sans les supprimer réellement de la base de données. Cette approche conserve les données historiques tout en excluant logiquement les entités inactives des requêtes.
Pour réaliser une suppression logicielle, une logique personnalisée peut être implémentée dans la méthode SaveChanges de DbContext, comme démontré dans la question. Cela garantit que les entités implémentent l'interface ISoftDelete et disposent de la méthode "Delete" pour les marquer comme supprimées.
Automatisation de la récupération des entités supprimées de manière logicielle
Cependant, la question plus loin demande comment ignorer automatiquement les entités supprimées de manière logicielle lors de la récupération des données. La solution réside dans l'utilisation de Entity Framework Dynamic Filters, une bibliothèque qui offre un moyen élégant de créer des filtres globaux qui seront appliqués automatiquement à toutes les requêtes pertinentes.
Implémentation d'EntityFramework.DynamicFilters
Pour implémenter cette fonctionnalité, suivez ces étapes :
Par exemple, pour un Filtre "IsDeleted":
modelBuilder.Filter("IsDeleted", (ISoftDelete d) => d.IsDeleted, false);
Utilisation
Une fois le filtre défini, toutes les requêtes sur les entités implémentant l'interface ISoftDelete incluront automatiquement la clause Where "where IsDeleted = faux". Cela garantit que les entités supprimées de manière transparente sont exclues des ensembles de résultats sans aucun code supplémentaire.
Remarque
La méthode Filter fournie par EntityFramework.DynamicFilters prend en charge les conditions de filtre complexes et peut également être appliqué aux propriétés de navigation. En utilisant cette bibliothèque, les développeurs peuvent simplifier la récupération des données tout en conservant la flexibilité de la suppression logicielle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!