Entity Framework Les filtres
Définition
Les filtres vous permettent de définir un filtre paramétré au moment de la configuration. Au moment de l'exécution, vous activez le filtre et appliquez des paramètres. Chaque requête de cette entité inclut le filtre.
Les filtres permettent de définir un prédicat qui sera appliqué à chaque entité d'un DbContext, sans que le développeur ait besoin de penser à l'inclure pour chaque requête. Les applications courantes incluent:
- Sécurité
- Locations multiples
- Partitionnement logique des données
- Suppressions douces
- Enregistrements actifs / inactifs
Configuration
FilterInterceptor doit être inscrit auprès de Entity Framework, via une classe DbConfiguration:
public class ExampleConfiguration : DbConfiguration
{
public ExampleConfiguration()
{
AddInterceptor(new FilterInterceptor());
}
}
Ou par la méthode OnModelCreating:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
DbInterception.Add(new FilterInterceptor());
}
Définir les filtres
Entité unique
Les filtres sont d'abord définis, puis configurés. Vous définissez le filtre sur une seule entité:
modelBuilder.Entity<Listing>()
.Filter("ActiveListings", c => c.Condition<ListingStatus>(
listing => listing.Status == ListingStatus.Active));
Ensemble d'entités
Les filtres sont également définis par rapport à un ensemble d'entités correspondant à un type (interface ou classe de base):
modelBuilder.Conventions.Add(
FilterConvention.Create<IAgencyEntity, int>("Agency", (e, agencyId) => e.AgencyId == agencyId);
Activer les filtres
Les filtres sont ensuite activés et les valeurs de paramètre renseignées sur une base DbContext:
dbContext.EnableFilter("ActiveListings");
dbContext.EnableFilter("Agency")
.SetParameter("agencyId", _userContext.CurrentUser.AgencyId);
Désactiver les filtres
Les filtres sont désactivés par défaut et vous pouvez les désactiver sélectivement après avoir activé:
dbContext.DisableFilter("ActiveListings");
Les noms de filtre doivent être uniques et les noms de paramètre de filtre correspondent au nom de paramètre fourni à l'expression de la définition de filtre.
Exigences
Version du framework d'entité
- Entity Framework 6.
Limites
- Pas d'accès au contexte pour les jointures complexes
- Propriétés de collection non disponibles