Entity Framework Core是否可以自动过滤DbSet<TEntity>
的{{1}}?
我希望仅针对EntityFrameworkCore实现something like that。
我希望在通过DbContext
访问IQueryable<TEntity>
之前自动过滤DbSet<TEntity>
。
答案 0 :(得分:3)
免责声明:我是该项目的所有者Entity Framework Plus
EF +查询过滤器允许您过滤DbSet并支持.NET Core(请务必阅读限制部分)
// 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();
答案 1 :(得分:2)
一种选择是实现进行过滤的外观类:
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
,你可能想要这样做。
答案 2 :(得分: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 );
}
}