B3.Extensions.Data Entity Framework Eklentisi

19 May

Entity Framework Core üzerinde yaptığım çalışmalarda gerek duyduğum araçları bir kütüphanede toparlıyorum ve Github üzerinden B3.Extensions.Data adında açık kaynak kütüphane olarak yayınlamaya ve Nuget paketleri halinde sunmaya başladım.

Nuget Yüklemesi

Kütüphaneyi Nuget üzerinden projelerinize aşağıdaki gibi yükleyebilirsiniz:

Install-Package B3.Extensions.Data

DbContextExtensions.cs

Extension Method’lar:

  • ExecuteQuery(string query, params object[] parameters)
  • ExecuteQueryAsync(string query, params object[] parameters)

Entity Framework Core 2.1 sürümünden itibaren düz SQL sorguları yapmak için bir Entity türüne ihtiyacınız vardır. (Bu durum daha sonraki versiyonlarda değişebilir.) Özel bir SQL query string çalıştırmak için DbSet<> tipine ait FromSQL() extension metodu kullanılır.

var blogs = context.Blogs
                   .FromSqlRaw("SELECT * FROM dbo.Blogs")
                   .ToList();

Ancak birden fazla tablonun birleştirilerek üretilen karmaşık sorguların kullanılması gerektiği durumlarda, bu yöntemin işe yaramaz. Bu durumda B3.Extensions.Data kütüphanesi kullanılabilir.

Örneğin asp.net core action metodu içerisinde şu şekilde kullanılabilir.

public async Task<IActionResult> Get()
{
   var sql = "SELECT type, SUM(length) FROM ways GROUP BY type";
   var queryResult = await _context.ExecuteQueryAsync(sql);

   return Ok(response);
}

ModelBuilderExtensions.cs

Extension Method’lar:

  • UseSoftDelete<TSoftDelete>(this ModelBuilder modelBuilder)

Eğer projelerinizde SoftDelete gibi bir yöntem uyguluyorsanız, bu aracı kullanabilirsiniz. Bu araç sayesinde veritabanından soft delete yapılmış kayıtlar filitrelenir ve getirilmez. Bu metodu kullanabilmek için soft delete kullanan Entity tiplerinizi, içerisinde “IsDeleted” adında bir boolean property bulunması gerekmektedir.

public interface ISoftDelete
{
   bool IsDeleted {get; set;}
}

public class Student: ISoftDelete
{
     public bool IsDeleted {get; set;}
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorum için bu kutuya doğru sayıyı girin * Time limit is exhausted. Please reload CAPTCHA.