答案 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 属性。