无法测试确切的API,但是一般的方法是创建一个受约束的泛型方法并通过反射进行调用:
public static class EFFilterExtensions{ public static void SetSoftDeleteFilter(this ModelBuilder modelBuilder, Type entityType) { SetSoftDeleteFilterMethod.MakeGenericMethod(entityType) .Invoke(null, new object[] { modelBuilder }); } static readonly MethodInfo SetSoftDeleteFilterMethod = typeof(EFFilterExtensions) .GetMethods(BindingFlags.Public | BindingFlags.Static) .Single(t => t.IsGenericMethod && t.Name == "SetSoftDeleteFilter"); public static void SetSoftDeleteFilter<TEntity>(this ModelBuilder modelBuilder) where TEntity : class, ISoftDeleteModel { modelBuilder.Entity<TEntity>().HasQueryFilter(x => !x.IsDeleted); }}
现在,您可以在您的内部使用类似的内容
OnModelCreating:
foreach (var type in modelBuilder.Model.GetEntityTypes()){ if (typeof(ISoftDeleteModel).IsAssignableFrom(type.ClrType)) modelBuilder.SetSoftDeleteFilter(type.ClrType);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)