Entity Framework Core’de global sorgu filtreleri (Laravel Eloquent’de ki global scope)

Merhaba arkadaşlar, bu makalede entity framework core’de global scope’ların nasıl kullanıldığına bakacağız.

.NET Core ile uygulama geliştirirken kendime bazen şu soruyu sorarım; “Laravel’de böyle bir özellik var ve tam da burada ihtiyacım olan şey! acaba .net core’de de var mı ?” diye sık sık sorar, daha sonra kendimi dökümantasyon içerisinde bulurum. İşte global scope özelliği de öyle birşeydi benim için 🙂 .NET core ve Java/Spring ile ilgili sık sık makale paylaşmak niyetindeyim fakat bu tamamen zamana bağlı bir şey, fırsat buldukça karalayacağım.

Konumuza dönecek olursak .NET Core’de global query scope’u şu şekilde kullanılabilir;

Diyelim ki Article isminde bir entity’in var, DbContext’iniz içerisinde ki onModealCreating metoduna aşağıda vermiş olduğum kod parçacığını ekleyin

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

Evet artık bundan sonra Article entity üzerinde yapacağınız tüm sorgularda yukarıda ki sorgu otomatik olarak çalıştırdığınız sorguya eklenip çalıştırılacak. Eğer disable etmek istiyorsanız IgnoreQueryFilters‘ı kullanabilirsiniz.

blogs = _context.Blogs
    .Include(b => b.Articles)
    .IgnoreQueryFilters()
    .ToList();

İşte .net core’de global scope kullanmak bu kadar. Soft Delete ve SaaS uygulama geliştirirken tenant’a göre filtrelemeyi bu şekilde yapabilir ve tekrar tekrar aynı kodları kullanmaktan kaçınabilirsiniz.

Bir sonra ki makalede global sorgu filtrelerini, entity bazında tek tek tanımlamak yerine hepsine otomatik olarak uygulamayı anlatacağım.