Filtrage par suppression logicielle avec Entity Framework Code First
Dans Entity Framework Code First, la suppression logicielle vous permet de "supprimer" des entités en les marquant comme supprimés plutôt que de les supprimer réellement de la base de données. Ceci est utile dans les scénarios dans lesquels vous souhaitez empêcher une suppression accidentelle ou conserver des données historiques.
L'un des défis de la suppression logicielle consiste à filtrer automatiquement les entités supprimées de manière logicielle lors de la récupération des données. Ceci peut être réalisé à l'aide du package EntityFramework.DynamicFilters.
EntityFramework.DynamicFilters
EntityFramework.DynamicFilters est une bibliothèque qui fournit un mécanisme pour créer des filtres globaux qui sont automatiquement appliqués. aux requêtes. Ces filtres peuvent être appliqués à n'importe quelle propriété d'une entité, y compris les propriétés de navigation.
Pour utiliser EntityFramework.DynamicFilters, vous devez :
public override int SaveChanges(bool acceptAllChangesOnSuccess) { // Soft delete implementation here return base.SaveChanges(acceptAllChangesOnSuccess); }
modelBuilder.Filter("IsDeleted", (ISoftDelete d) => d.IsDeleted, false);
Ce filtre garantit que toute requête sur une entité implémentant le L'interface ISoftDelete inclura automatiquement une clause WHERE pour la propriété IsDeleted, excluant les entités pour lesquelles IsDeleted est défini sur vrai.
Exemple
Considérez le code suivant :
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); } }
Avec cette configuration, le code suivant ignorera tous les utilisateurs marqués comme supprimés :
var user = dbContext.Users.FirstOrDefault(u => u.Id == 1);
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!