Bonjour,
Pourquoi la configuration ne fonctionne-t-elle pas sur les interfaces ?
Et surtout comment faire pour mettre en place un filtre pour toutes les entités respectant cette interface ?
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface IMonInterface { public int? MonFiltre {get; set; } }
public class MonEntite : IMonInterface { public int? MonFiltre {get; set; } }
 
// Ici ça fonctionne
    public class MonEntiteConfiguration : IEntityTypeConfiguration<MonEntite>
    {
        public void Configure(EntityTypeBuilder<MonEntite> builder) => builder.HasQueryFilter(o => o.MonFiltre == null);
    }
 
// Ici non
    public class IMonInterface Configuration : IEntityTypeConfiguration<IMonInterface >
    {
        public virtual void Configure(EntityTypeBuilder<IMonInterface> builder) => builder.HasQueryFilter(o => o.MonFiltre == null);
    }

J'ai aussi tenté le générique :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
    public static class DbContextFilterExtension
    {
        public static void BuildFilters<T>(this ModelBuilder builder, Expression<Func<T, bool>> filter)
            where T : class
            => builder.Model
                      .GetEntityTypes()
                      .Where(o => o.ClrType is T ||
                                  o.ClrType.GetInterface(typeof(T).Name) != null)
                      .ForEach(o => ((EntityTypeBuilder<T>)builder.Entity(o.Name)).HasQueryFilter(filter)); // Exception : Convertion impossible
                      .ForEach(o => builder.Entity(o.Name).HasQueryFilter(filter)); // Exception : Ne reconnait pas l'expression lambda
    }

Avec
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
protected override void OnModelCreating(ModelBuilder modelBuilder) => modelBuilder.BuildFilters<T>()

Précision : Je suis sur la version 3.16 d'EF Core sans pouvoir monter en 5.0 car j'utilise le framework .Net standard 4.8.

Merci pour votre coopération...