Geliştiriciler için modern veritabanı sistemleri, esnek veri yapıları sunmak adına JSON veri türünü desteklemektedir.

JSON Veri Türü ile Çalışmak: EF Core’da PostgreSQL ve SQL Server Desteği

Geliştiriciler için modern veritabanı sistemleri, esnek veri yapıları sunmak adına JSON veri türünü desteklemektedir. Entity Framework Core (EF Core), hem PostgreSQL hem de SQL Server için JSON veri türü ile çalışma imkanı sunar. Bu makalede, JSON veri türü ile çalışmanın temel prensiplerini, PostgreSQL ve SQL Server örnekleriyle açıklayacağız.


JSON Veri Türü Nedir?

JSON (İnsan Tarafından Okunabilir JavaScript Nesne Notasyonu), karmaşık veri yapılarını kolayca saklamak ve iletmek için kullanılan bir formattır. Modern veritabanıları JSON desteği sunarak geliştiricilere daha fazla esneklik sağlar:

  • PostgreSQL: json ve jsonb veri türlerini destekler.

  • SQL Server: JSON desteği JSON veri türü yerine metin tabanlı bir yapıyla (örneğin, NVARCHAR) sağlanır.


EF Core’da JSON Veri Türü ile Çalışma

EF Core, hem PostgreSQL hem de SQL Server için JSON veri türleri ile çalışmayı destekler. Ancak bu desteğin detayları her bir veritabanı sistemi için farklılık gösterir.

Model Yapısı

Bir JSON veri türü örneğini temsil eden bir model tasarlayalım:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    // JSON veri türü olarak kaydedilecek
    public ProductDetails Details { get; set; }
}

public class ProductDetails
{
    public string Manufacturer { get; set; }
    public List<string> Tags { get; set; }
}

PostgreSQL: JSONB Desteği

PostgreSQL’de jsonb veri türü kullanılır. Aşağıda, EF Core için PostgreSQL JSON desteğini etkinleştirme adımları yer almaktadır:

  1. NuGet Paketi Ekleme:

    dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
  2. DbContext Ayarı:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Product>()
            .Property(p => p.Details)
            .HasColumnType("jsonb");
    }
  3. Örnek Kullanım:

    using var context = new AppDbContext();
    
    var product = new Product
    {
        Name = "Smartphone",
        Details = new ProductDetails
        {
            Manufacturer = "TechCorp",
            Tags = new List<string> { "Electronics", "Mobile" }
        }
    };
    
    context.Products.Add(product);
    context.SaveChanges();
    
    var products = context.Products
        .Where(p => p.Details.Tags.Contains("Mobile"))
        .ToList();

SQL Server: JSON Fonksiyonları ile Çalışma

SQL Server, JSON veri türünü metin olarak saklar ve JSON ile çalışmak için dahili fonksiyonlar sunar.

  1. NuGet Paketi Ekleme:

    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
  2. DbContext Ayarı:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Product>()
            .Property(p => p.Details)
            .HasConversion(
                v => JsonSerializer.Serialize(v, new JsonSerializerOptions { WriteIndented = false }),
                v => JsonSerializer.Deserialize<ProductDetails>(v, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }));
    }
  3. Örnek Kullanım:

    using var context = new AppDbContext();
    
    var product = new Product
    {
        Name = "Laptop",
        Details = new ProductDetails
        {
            Manufacturer = "TechCorp",
            Tags = new List<string> { "Electronics", "Computers" }
        }
    };
    
    context.Products.Add(product);
    context.SaveChanges();
    
    var products = context.Products
        .Where(p => EF.Functions.JsonContains(p.Details.ToString(), "Computers"))
        .ToList();

Performans ve Kullanım Notları

  • PostgreSQL: jsonb, sorgulama performansı ve indeksleme desteği ile öne çıkar.

  • SQL Server: JSON desteği metin tabanlı olduğu için karmaşık yapıları sorgulamak daha fazla efor gerektirir.


Sonuç

EF Core, PostgreSQL ve SQL Server üzerinde JSON veri türü ile esnek çözümler sunar. PostgreSQL, JSON desteği konusunda SQL Server’a kıyasla daha iyi performans ve daha fazla özellik sağlar. Doğru veritabanı ve JSON desteği, projenizin ihtiyaçlarına bağlı olarak seçilmelidir.

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder