Geliştiriciler için modern veritabanı sistemleri, esnek veri yapıları sunmak adına JSON veri türünü desteklemektedir.
- Yazılım Uzmanları
- 08 Aralık 2024
- 225 kez görüntülendi.
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
vejsonb
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:
-
NuGet Paketi Ekleme:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
-
DbContext Ayarı:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Product>() .Property(p => p.Details) .HasColumnType("jsonb"); }
-
Ö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.
-
NuGet Paketi Ekleme:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
-
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 })); }
-
Ö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.
Bu yazıya 0 yorum yapılmış.