Entity Framework Core ile Veritabanı Tasarımı: Best Practices ve Common Pitfalls

Hakan Güzel
2 min readAug 29, 2024

--

Entity Framework Core (EF Core), .NET geliştiriciler arasında yaygın olarak kullanılan bir Object-Relational Mapping (ORM) aracıdır. Veritabanı işlemlerini kolaylaştıran bu araç, modelleme ve veritabanı tasarımı süreçlerinde bazı önemli noktalara dikkat edilmesini gerektirir. Bu rehberde, EF Core kullanarak veritabanı modelleri oluşturmanın en iyi yollarını ve yaygın tuzaklarını ele alacağız. Ayrıca, verimli veritabanı tasarımları ve performans için modelleme ipuçları ile EF Core’un güçlü özelliklerini nasıl maksimize edebileceğinize dair stratejiler üzerinde duracağız.

1. Veritabanı Modelleme Best Practices

  • Code-First Yaklaşımı: EF Core ile modellerinizi kod üzerinden tanımlayarak, veritabanı şemanızı doğrudan C# sınıflarından türetebilirsiniz. Bu yaklaşım, veritabanı tasarımını ve uygulama kodunuzu daha yakından entegre etmenize olanak tanır.
  • Data Annotations ve Fluent API: EF Core, model sınıflarınızı zenginleştirmek için Data Annotations ve Fluent API’yi destekler. Bu araçlar, tablo adlarını özelleştirmek, ilişkileri yapılandırmak ve validation kuralları eklemek için kullanılabilir.
public class User
{
[Key]
public int UserId { get; set; }

[Required]
[StringLength(100)]
public string Name { get; set; }

public ICollection<Order> Orders { get; set; }
}
  • Fluent API ile daha karmaşık yapılandırmalar:
modelBuilder.Entity<User>()
.Property(u => u.Name)
.IsRequired()
.HasMaxLength(100);

2. Common Pitfalls ve Bunlardan Kaçınma Yolları

  • Eager Loading Kullanımı: EF Core’da, Include metodunu kullanarak ilişkili verileri önceden yüklemek mümkündür. Ancak, bu metodun aşırı kullanımı performans sorunlarına yol açabilir. Gereksiz Eager Loading'den kaçının ve gerektiğinde Lazy Loading veya Selective Loading tekniklerini tercih edin.
  • N+1 Sorgu Sorunu: Bir koleksiyon için ayrı ayrı sorgular göndermek yerine, ilişkili verileri tek bir sorguda çekmeye özen gösterin. EF Core, bu tür sorunları azaltmak için kapsamlı sorgu iyileştirmeleri sunar.

3. Performans için Modelleme İpuçları

  • Indexed Properties: Sıkça sorgulanan alanlarda indeksler oluşturarak sorgu performansını artırın. EF Core, model tanımında indeksleri yapılandırmanıza olanak tanır.
modelBuilder.Entity<User>()
.HasIndex(u => u.Email)
.HasName("Index_Email");
  • Denormalization Dikkatli Kullanın: Veri tekrarını azaltmak güzel olsa da, bazı durumlarda performansı artırmak için denormalizasyon yapmak yararlı olabilir. Örneğin, sık erişilen ve yavaş hesaplanan verileri, hesaplamayı azaltmak ve erişimi hızlandırmak için ayrı bir tabloda önceden hesaplanmış olarak saklamak.

4. EF Core’un Güçlü Özelliklerinden Yararlanma

  • Migrationlar: Veritabanı şemanızda yapacağınız değişiklikleri EF Core Migrationlar aracılığıyla yönetin. Bu, veritabanı versiyon kontrolünü ve değişikliklerin kolayca uygulanmasını sağlar.
  • C# LINQ Sorguları: Veritabanı sorgularınızı, SQL yazmak yerine, C# içinde LINQ sorguları kullanarak yazın. Bu, kodun okunabilirliğini ve bakımını kolaylaştırır.

Sonuç

Entity Framework Core, .NET geliştiricileri için güçlü bir ORM aracıdır, ancak etkili kullanımı, bazı best practices ve dikkat edilmesi gereken tuzakların farkında olmayı gerektirir. Uygulamanızın performansını ve verimliliğini artırmak için bu rehberde sunulan önerilere uyarak, veritabanı tasarımınızı optimize edebilirsiniz.

--

--