gpt4 book ai didi

entity-framework - EF核心2 : How to apply HasQueryFilter for all entities

转载 作者:行者123 更新时间:2023-12-03 07:12:47 34 4
gpt4 key购买 nike

有没有办法将 HasQueryFilter() 全局应用到我的所有实体?我不想在 ModelBuilder 中一一添加。

modelBuilder.Entity<Manufacturer>().HasQueryFilter(p => p.IsActive);

最佳答案

如果您有定义 IsActive 属性的基类或接口(interface),您可以使用 Filter all queries (trying to achieve soft delete) 中的方法.

否则,您可以迭代实体类型,并为具有 bool IsActive 属性的每种类型使用 Expression 类方法构建动态过滤器表达式:

foreach (var entityType in modelBuilder.Model.GetEntityTypes())
{
var isActiveProperty = entityType.FindProperty("IsActive");
if (isActiveProperty != null && isActiveProperty.ClrType == typeof(bool))
{
var parameter = Expression.Parameter(entityType.ClrType, "p");
var filter = Expression.Lambda(Expression.Property(parameter, isActiveProperty.PropertyInfo), parameter);
entityType.QueryFilter = filter;
}
}

更新 (EF Core 3.0):由于公共(public)元数据 API 发生重大更改(使用 Get/Set 扩展方法替换许多属性),最后一行变成

entityType.SetQueryFilter(filter);

关于entity-framework - EF核心2 : How to apply HasQueryFilter for all entities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812459/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com