实体框架核心过滤器DbSet

问题描述 投票:3回答:3

是否有可能在Entity Framework Core中自动过滤DbSet<TEntity>DbContext?我想为EntityFrameworkCore实现something like that。我想在它通过IQueryable<TEntity>访问之前自动过滤DbSet<TEntity>

c# .net entity-framework asp.net-core
3个回答
2
投票

你可以看看下面的链接。

https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.0#model-level-query-filters

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public int TenantId { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>().HasQueryFilter(
            p => !p.IsDeleted
            && p.TenantId == this.TenantId );
    }
}

3
投票

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

EF +查询过滤器允许您过滤DbSet并支持.NET Core(确保阅读限制部分)

维基:EF+ Query Filter

// 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();

2
投票

一种选择是实现进行过滤的facade类:

public class DataService
{
    private readonly DataContext _context;

    public DataService(DataContext context)
    {
        _context = context;
    }

    public IQueryable<EntityType> EntityTypes => _context.EntityTypes.Where(t => t.Something == true);
}

其中DataContext是您的EF DbContext,而EntityType是您实体的类型。

然后其他类可以使用这个。注意我没有在这里实现IDisposable,你可能想这样做。

© www.soinside.com 2019 - 2024. All rights reserved.