2017-03-07 17 views
3

DbContextDbSet<TEntity>を自動的にフィルター処理することはEntity Framework Coreで可能ですか? 私はsomething like thatをEntityFrameworkCoreのためだけに実装しようとしています。 DbSet<TEntity>にアクセスする前に、IQueryable<TEntity>を自動的にフィルタリングしたいと思います。Entity FrameworkコアフィルターDbSet

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はあなたのエンティティのタイプである:

答えて

1

以下のリンクをご覧ください。

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); 
    } 
} 
2

1つのオプションは、フィルタリングを行いファサードクラスを実装することであろう。

他のクラスでもこのクラスを使用できます。ここではIDisposableを実装していませんでした。そうしたいかもしれません。

+1

はDbContextのエンティティ内に直接これを行う方法はありますか? –

+0

奇数おそらく質問が、なぜ 'EtityTypes => _context ...'私は意味、なぜそれ物性しない、 '公共のIQueryable EntityTypes { 取得 { リターン_DataContext.EntityTypes.Where(ら=>らのような.SomeId.Equals(_someValue)); } } '? – user3801839

+0

あなたの質問を正しく理解していれば、それは私がここで行ったことと全く同じです:)構文 'public Type Name => _something;'は 'public Type Name {get {return _something; }} '。それはちょうど短いです。 – juunas

3

免責事項:私はEF +クエリフィルタを使用すると、DbSetを濾過し、.NETのコア(制限部を必ずお読みください)

ウィキをサポートすることができますEntity Framework Plus

プロジェクトの所有者によ: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(); 
関連する問題