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 ?
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 :
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
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...
Partager