EFEF Core Handbook

TEMEL

Giriş

Bu doküman, Entity Framework Core ile çalışan .NET geliştiricileri için kapsamlı bir başvuru kaynağıdır. Başlangıç seviyesinden uzman konulara kadar kademeli bir öğrenme yolu sunar.

Entity Framework Core 8 / 9 / 10 · Son güncelleme: Mayıs 2026
.NET 8 / 9 / 10 uyumlu · SQL Server & PostgreSQL örnekleri · 49 bölüm · 240+ kod örneği


Nasıl kullanılır?

  • Temel — EF Core'a yeni başlıyorsan buradan başla. DbContext, property, index temelleri.
  • Orta — İlişkiler, migration, change tracking gibi günlük geliştirmede sürekli kullanacağın konular.
  • İleri — Owned entities, inheritance, concurrency, testing gibi mimari kararları etkileyen konular.
  • Uzman — Interceptors, multi-tenancy, audit trail gibi production-grade pattern'lar.
  • Referans — Hızlı bakış tabloları, annotations özeti, provider karşılaştırması.

Her bölümde: Fluent API kodu → üretilen SQL → açıklayıcı diyagram → pratik ipuçları → sık yapılan hatalar.

Örnekler SQL Server ve PostgreSQL üzerinden verilmiştir. Provider'a özgü farklar için → Bölüm 41

EF Core Ne Zaman Kullanmalı, Ne Zaman Kullanmamalı?

EF Core iyi bir tercih:

  • Tipik web API / MVC uygulamaları (CRUD işlemleri)
  • İş kuralları olan domain modelleri (ilişkiler, validasyonlar)
  • Migration ile veritabanı şemasını kod olarak yönetmek istiyorsan
  • Transaction yönetimi gereken işlemler

Bu durumlarda EF Core'un doğru özelliğini seç:

Durum Sorun (basitçe) EF Core Çözümü
Çok büyük veri aktarımı (100K+ satır) Her satırı ayrı ayrı izler → yavaş ExecuteUpdate / ExecuteDelete + SqlBulkCopy (ADO.NET)
Sadece veri okuma (raporlama) Her satır için C# nesnesi oluşturur, ağır .AsNoTracking() + projeksiyon (Select)
Zaten stored procedure kullanıyorsun SP zaten işi yapıyor FromSqlInterpolated ile SP çağır
Çok basit 2-3 tabloluk uygulama Konfigürasyon yükü fazla gelebilir Minimal API + DbContext (tek dosyada bile çalışır)

EF Core tek başına yeterli: Change tracking gereksizse AsNoTracking(), toplu işlem gerekiyorsa ExecuteUpdate/Delete, ham SQL gerekiyorsa FromSqlInterpolated kullan. İlerledikçe her birini detaylı göreceksin.