C# 实体框架核心过滤器数据库集
在实体框架核心中是否可以自动过滤C# 实体框架核心过滤器数据库集,c#,.net,entity-framework,asp.net-core,C#,.net,Entity Framework,Asp.net Core,在实体框架核心中是否可以自动过滤DbContext的DbSet? 我希望只为EntityFrameworkCore实现。 我想在通过DbSet访问IQueryable之前自动过滤IQueryable,一个选项是实现一个进行过滤的facade类: public class DataService { private readonly DataContext _context; public DataService(DataContext context) {
DbContext
的DbSet
?
我希望只为EntityFrameworkCore实现。
我想在通过
DbSet
访问IQueryable
之前自动过滤IQueryable
,一个选项是实现一个进行过滤的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上下文)
{
_上下文=上下文;
}
public IQueryable EntityTypes=>\u context.EntityTypes.Where(t=>t.Something==true);
}
其中,DataContext
是EF DbContext,而EntityType
是实体的类型
那么其他类就可以使用这个类了。注意:我没有在这里实现IDisposable,您可能想这样做。免责声明:我是项目的所有者 EF+查询筛选器允许您筛选DbSet和support.NET Core(请确保阅读限制部分) 维基:
//使用Z.EntityFramework.Plus;//别忘了包括这个。
var ctx=new EntitiesContext();
过滤(q=>q.Where(x=>!x.issoftdelected));
//从Post中选择*其中IsSoftDeleted=false
var list=ctx.Posts.ToList();
您可以查看下面的链接
范例
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 );
}
}
公共类BloggingContext:DbContext
{
公共数据库集博客{get;set;}
公共DbSet Posts{get;set;}
public int TenantId{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().HasQueryFilter(
p=>!p.IsDeleted
&&p.TenantId==this.TenantId);
}
}
是否有一种方法可以直接在DbContext的实体中实现这一点?也许是个奇怪的问题,但为什么EtityTypes=>\u context…
我的意思是,为什么不将其设为属性,比如public-IQueryable-entitypes{get{return u-DataContext.entitypes.Where(et=>et.SomeId.Equals)(_someValue));}}
?如果我正确理解了你的问题,这与我在这里所做的完全相同:)语法公共类型名称=>\u something
与公共类型名称{get{return\u something;}}
完全相同。只是短一点。请看这个链接
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 );
}
}