S. *_*dal 4 entity-framework entity-framework-core
有什么方法可以将“HasQueryFilter”全局应用于我的所有实体?我不想一一添加模型构建器?
modelBuilder.Entity<Manufacturer>().HasQueryFilter(p => p.IsActive);
Run Code Online (Sandbox Code Playgroud)
Iva*_*oev 11
如果您有定义IsActive属性的基类或接口,您可以使用过滤所有查询(尝试实现软删除)中的方法。
否则,您可以迭代实体类型,并为每个具有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;
}
}
Run Code Online (Sandbox Code Playgroud)
更新(EF Core 3.0):由于公共元数据 API 重大更改(用Get/Set扩展方法替换了许多属性),最后一行变为
entityType.SetQueryFilter(filter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6147 次 |
| 最近记录: |