Skip to content

Entity Framework - Global Query Filters

Giriş

Entity Framework'te Global Query Filters (Küresel Sorgu Filtreleri), tüm sorgulara otomatik olarak uygulanan filtrelerdir. Mid-level geliştiriciler için bu kavramın anlaşılması ve etkin kullanımı önemlidir.

Global Query Filters'ın Önemi

  1. Veri Yönetimi
  2. Tüm sorgulara otomatik filtre uygulama
  3. Daha iyi veri organizasyonu
  4. Daha iyi veri bütünlüğü
  5. Daha iyi veri erişimi

  6. Güvenlik

  7. Veri erişimini kontrol etme
  8. Hassas verileri filtreleme
  9. Yetkilendirme
  10. Güvenlik kontrolleri

  11. Bakım

  12. Daha az kod tekrarı
  13. Daha kolay test edilebilirlik
  14. Daha iyi modülerlik
  15. Daha kolay genişletilebilirlik

Global Query Filters Özellikleri

  1. Temel Global Query Filter

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasQueryFilter(b => !b.IsDeleted);
    
        modelBuilder.Entity<Post>()
            .HasQueryFilter(p => p.IsPublished);
    }
    

  2. Global Query Filter Kullanımı

    public class BlogService
    {
        private readonly DbContext _context;
    
        public BlogService(DbContext context)
        {
            _context = context;
        }
    
        public List<Blog> GetActiveBlogs()
        {
            return _context.Blogs.ToList();
        }
    
        public List<Blog> GetInactiveBlogs()
        {
            return _context.Blogs.IgnoreQueryFilters().ToList();
        }
    }
    

  3. Global Query Filter Validasyonu

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>(entity =>
        {
            entity.HasQueryFilter(b => !b.IsDeleted);
            entity.Property(b => b.IsDeleted).IsRequired();
        });
    
        modelBuilder.Entity<Post>(entity =>
        {
            entity.HasQueryFilter(p => p.IsPublished);
            entity.Property(p => p.IsPublished).IsRequired();
        });
    }
    

Global Query Filters Kullanımı

  1. Entity İçinde Kullanım

    public class Blog
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public bool IsDeleted { get; set; }
    }
    
    public class Post
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public bool IsPublished { get; set; }
    }
    
    public class BlogService
    {
        private readonly DbContext _context;
    
        public BlogService(DbContext context)
        {
            _context = context;
        }
    
        public List<Blog> GetActiveBlogs()
        {
            return _context.Blogs.ToList();
        }
    
        public List<Blog> GetAllBlogs()
        {
            return _context.Blogs.IgnoreQueryFilters().ToList();
        }
    }
    

  2. DbContext Konfigürasyonu

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>(entity =>
        {
            entity.HasQueryFilter(b => !b.IsDeleted);
            entity.Property(b => b.IsDeleted).IsRequired();
        });
    
        modelBuilder.Entity<Post>(entity =>
        {
            entity.HasQueryFilter(p => p.IsPublished);
            entity.Property(p => p.IsPublished).IsRequired();
        });
    }
    

  3. Global Query Filter Dönüşümleri

    public static class BlogExtensions
    {
        public static IQueryable<Blog> FilterByStatus(this IQueryable<Blog> query, bool includeDeleted)
        {
            if (includeDeleted)
            {
                return query.IgnoreQueryFilters();
            }
            return query;
        }
    }
    

Best Practices

  1. Global Query Filter Tasarımı
  2. Single Responsibility
  3. Immutability
  4. Validation
  5. Business logic

  6. Güvenlik

  7. Input validation
  8. Data integrity
  9. Access control
  10. Audit logging

  11. Performans

  12. Query optimization
  13. Index kullanımı
  14. Caching
  15. Lazy loading

  16. Bakım

  17. Code organization
  18. Documentation
  19. Testing
  20. Versioning

Mülakat Soruları

Temel Sorular

  1. Entity Framework'te Global Query Filter nedir?
  2. Cevap: Global Query Filter, tüm sorgulara otomatik olarak uygulanan filtrelerdir.

  3. Entity Framework'te Global Query Filter ve Normal Filter arasındaki fark nedir?

  4. Cevap: Normal Filter'lar her sorgu için ayrı ayrı uygulanır, Global Query Filter'lar tüm sorgulara otomatik olarak uygulanır.

  5. Entity Framework'te Global Query Filter nasıl konfigüre edilir?

  6. Cevap: DbContext.OnModelCreating metodunda HasQueryFilter metodu kullanılarak konfigüre edilir.

  7. Entity Framework'te Global Query Filter ne zaman kullanılır?

  8. Cevap: Tüm sorgulara otomatik filtre uygulamak, veri erişimini kontrol etmek veya hassas verileri filtrelemek için kullanılır.

  9. Entity Framework'te Global Query Filter performansı nasıl etkiler?

  10. Cevap: Query optimizasyonunu etkileyebilir ancak veri erişimini kontrol etmeyi kolaylaştırır.

Teknik Sorular

  1. Temel Global Query Filter nasıl oluşturulur?
  2. Cevap:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasQueryFilter(b => !b.IsDeleted);
    }
    

  3. Global Query Filter nasıl kullanılır?

  4. Cevap:

    public List<Blog> GetActiveBlogs()
    {
        return _context.Blogs.ToList();
    }
    
    public List<Blog> GetAllBlogs()
    {
        return _context.Blogs.IgnoreQueryFilters().ToList();
    }
    

  5. Global Query Filter validasyonu nasıl yapılır?

  6. Cevap:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>(entity =>
        {
            entity.HasQueryFilter(b => !b.IsDeleted);
            entity.Property(b => b.IsDeleted).IsRequired();
        });
    }
    

  7. Global Query Filter nasıl devre dışı bırakılır?

  8. Cevap:

    public List<Blog> GetAllBlogs()
    {
        return _context.Blogs.IgnoreQueryFilters().ToList();
    }
    

  9. Global Query Filter nasıl özelleştirilir?

  10. Cevap:
    public static class BlogExtensions
    {
        public static IQueryable<Blog> FilterByStatus(this IQueryable<Blog> query, bool includeDeleted)
        {
            if (includeDeleted)
            {
                return query.IgnoreQueryFilters();
            }
            return query;
        }
    }
    

İleri Seviye Sorular

  1. Entity Framework'te Global Query Filter performansı nasıl optimize edilir?
  2. Cevap:

    • Query optimizasyonu
    • Index kullanımı
    • Caching stratejileri
    • Lazy loading
    • Materialization optimizasyonu
  3. Entity Framework'te distributed sistemlerde Global Query Filter nasıl yönetilir?

  4. Cevap:

    • Consistency
    • Replication
    • Sharding
    • Partitioning
    • Caching
  5. Entity Framework'te high concurrency senaryolarında Global Query Filter nasıl yönetilir?

  6. Cevap:

    • Thread safety
    • Atomic operations
    • Locking stratejileri
    • Isolation levels
    • Conflict resolution
  7. Entity Framework'te Global Query Filter monitoring ve profiling nasıl yapılır?

  8. Cevap:

    • Query profiling
    • Performance metrics
    • Resource monitoring
    • Profiling tools
    • Health checks
  9. Entity Framework'te custom Global Query Filter stratejileri nasıl geliştirilir?

  10. Cevap:
    • Custom filter handling
    • Custom validation
    • Custom optimization
    • Custom caching
    • Custom materialization