将where条件添加到实体框架核心的所有请求中

时间:2017-02-27 17:55:22

标签: entity-framework entity-framework-core

我遇到与以下相同的问题

Adding Where Condition to All Requests EF6

但我使用的是Entity Framework核心。是否可以这样做?

2 个答案:

答案 0 :(得分:2)

答案是

但将来可能有可能。

实体框架核心还没有构建此类功能所需的拦截器。

免责声明:我是该项目的所有者Entity Framework Plus

这可能是你现在最接近的。

在Include方法(需要Interceptor)中过滤上下文但不是相关实体。

// using Z.EntityFramework.Plus; // Don't forget to include this.
var ctx = new EntitiesContext();

ctx.Filter<Post>(q => q.Where(x => !x.IsSoftDeleted));

// SELECT * FROM Post WHERE IsSoftDeleted = false
var list = ctx.Posts.ToList();

维基:Query Filter

答案 1 :(得分:0)

答案是,因为EF Core> = 2.0 with Global Query Filters:)

假设以下实体:

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public bool IsDeleted { get; set; }
}

您可以使用HasQueryFilter在OnModelCreating中配置全局查询过滤器:

modelBuilder.Entity<Post>().HasQueryFilter(p => !p.IsDeleted);

使用上述方法,将IsDeleted设置为true的帖子将不再包含在结果中,除非您明确为其指定了Where子句,或者在其中禁用全局过滤器该查询:

var posts = db.Posts
    .IgnoreQueryFilters()
    .ToList();

此功能的一些常见应用是:

软删除-实体类型定义了 IsDeleted 属性。

多租户-实体类型定义 TenantId 属性。