在我的ModelContext中,我有注册查询过滤器的功能,我在OnModelCreating(ModelBuilder builder)
方法中运行。
private void RegisterQueryFilters(ModelBuilder builder)
{
builder.Entity<Apple>().HasQueryFilter(e => e.ProductId == ProductId);
builder.Entity<Orange>().HasQueryFilter(e => e.ProductId == ProductId);
builder.Entity<Kiwi>().HasQueryFilter(e => e.ProductId == ProductId);
builder.Entity<Banana>().HasQueryFilter(e => e.ProductId == ProductId);
}
总是当我添加新实体时,我必须把它放在这里。但是我担心有一天会有人忘记在这里加上这个。是否有任何方法迫使用户以某种方式添加它?或者可以迭代所有实体并对所有实体执行相同的功能。像这样:
private void RegisterQueryFilters(ModelBuilder builder)
{
foreach (var entity in AllEntity)
{
builder.Entity<entity>().HasQueryFilter(e => e.ProductId == ProductId);
}
}
答案 0 :(得分:-1)
有一个nuget包:EntityFramework.DynamicFilters如果你在EF 6上
https://www.nuget.org/packages/EntityFramework.DynamicFilters/
我认为即使在EF 7 /核心中它也可以开箱即用(不需要那个nuget)
首先:让所有权限实现一个接口或从一个抽象类继承(在下一行中称为EntityBase)
第二步:将其添加到DBContext中的OnModelCreating
modelBuilder.Filter("IsDeleted", (EntityBase d) => d.Deleted, false);
Grtz
答案 1 :(得分:-1)
我不确定我是否完全理解你的要求,但我想你会从中获益的是从类派生的所有类型的列表
List<Type> knownTypes = new List<Type>();
foreach(Type t in Assembly.GetExecutingAssembly().GetTypes())
{
if (typeof(Entity).IsAssignableFrom(t))
knownTypes.Add(t);
}