Maison >développement back-end >C++ >Comment le code Entity Framework peut-il d'abord implémenter le filtrage par suppression logicielle ?

Comment le code Entity Framework peut-il d'abord implémenter le filtrage par suppression logicielle ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-02 21:22:38977parcourir

How Can Entity Framework Code First Implement Soft Delete Filtering?

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 :

  1. Installer le package à partir de NuGet.
  2. Ajoutez la ligne suivante à votre DbContext class:
public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
    // Soft delete implementation here
    return base.SaveChanges(acceptAllChangesOnSuccess);
}
  1. Dans la méthode OnModelCreating de votre DbContext, définissez le filtre :
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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn