Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
EF Core'da Owned Type ve Value Converter: Adres, Enum ve Strongly Typed Id
Kimliği olmayan değerleri OwnsOne ve OwnsMany ile sahibine bağlıyor, enum'u metin olarak saklıyor, Id'leri kendi tiplerine sarıyoruz. Value comparer olmadan kaybolan değişikliği ve SQLite'a özgü OwnsMany tuzağını gerçek çıktılarla görüyoruz.
EF Core'da Inheritance Mapping: TPH, TPT ve Hangisini Ne Zaman Seçmeli
Bir class hiyerarşisini EF Core tablolara nasıl çevirir? Discriminator kolonuyla TPH'yi ve tip başına tablo kuran TPT'yi gerçek SQL çıktılarıyla karşılaştırıyor, modele eklenmeyen alt class gibi sessiz tuzakları görüyoruz.
EF Core'da Global Query Filter: Soft Delete, Multi-Tenancy ve IgnoreQueryFilters
HasQueryFilter ile soft delete ve multi-tenancy kuruyor, Remove'u UPDATE'e çeviriyor, IgnoreQueryFilters ile filtreyi kapatıyor ve required navigation'larda INNER JOIN yüzünden kaybolan satırlar gibi ilişki tuzaklarını gerçek SQL ile inceliyoruz.
EF Core'da Performans Temelleri: N+1, Projection, AsNoTracking ve Compiled Query
N+1 sorgularını komut sayarak yakalıyor, projection ile DTO'ya geçiyor, tracking'in, index'in, split query'nin ve compiled query'nin etkisini SQLite üzerinde ölçüyor ve TagWith ile LogTo kullanarak sorguları izliyoruz.
ASP.NET Core'da EF Core: AddDbContext, Scoped Lifetime, Factory ve Pooling
DbContext'i ASP.NET Core'a AddDbContext ile bağlıyor, scoped lifetime'ı ContextId ile görüyor, singleton ve background service tuzaklarını çözüyor, AddDbContextFactory ile AddDbContextPool'un ne zaman işe yaradığını gerçek çıktılarla inceliyoruz.
EF Core'da Raw SQL: FromSqlRaw, FromSqlInterpolated, Keyless Entity ve SQL Injection
FromSqlRaw ile FromSqlInterpolated'ın farkını, üzerine LINQ eklenince oluşan SQL'i, $ ile yapılan SQL injection tuzağını, ExecuteSql komutlarını, keyless entity ile view eşlemeyi ve SQL Server'da stored procedure çağırmayı gerçek çıktılarla görüyoruz.
EF Core'da Concurrency: Token, rowversion ve DbUpdateConcurrencyException
Lost update'i gerçek bir örnekle görüyor, concurrency token ile optimistic concurrency kuruyor, SQL Server'da rowversion'ı, SQLite'ta Guid sürüm kolonunu kullanıyor ve DbUpdateConcurrencyException'ı retry ile çözüyoruz.
EF Core'da Transaction'lar: SaveChanges, BeginTransaction ve Savepoint'ler
SaveChanges'in örtük transaction'ını loglarla görüyor, birden fazla SaveChanges'i BeginTransaction ile tek bütün yapıyor, savepoint'lerle kısmi geri alma yapıyor ve TransactionScope ile retry stratejisinin tuzaklarına bakıyoruz.
EF Core ile Veri Kaydetme: SaveChanges, İlişkili Graf ve Disconnected Entity'ler
EF Core'da veri kaydetmenin iki dünyası: connected senaryoda Add/Remove ve yalnızca değişen kolonları yazan SaveChanges, SQLite ve SQL Server'da batching, ilişkili graf kaydetme ve yetim kayıtlar; disconnected senaryoda Update'in bütün kolonları yazması, yükle-değiştir, SetValues, Attach ve IsModified.
EF Core'da Change Tracking: Entity State'leri, AsNoTracking ve Identity Resolution
EF Core'un change tracker'ını açıyoruz: beş entity state'i, ChangeTracker.Entries ve DebugView, aynı satır için tek nesne kuralı (identity resolution), AsNoTracking ile AsNoTrackingWithIdentityResolution farkı, DetectChanges'in ne zaman çalıştığı ve 'already being tracked' hatası.
EF Core'da İlişkili Veri Yükleme: Include, Explicit ve Lazy Loading, Split Query
EF Core'da ilişkili veriyi getirmenin üç yolunu gerçek SQL çıktılarıyla karşılaştırıyoruz: Include/ThenInclude ve filtered include, Entry API ile explicit loading, proxy'lerle lazy loading ve N+1 faturası; sonra cartesian explosion ve AsSplitQuery.
EF Core ile LINQ Sorguları: SQL Çevirisi, Client Evaluation ve IQueryable Tuzağı
EF Core'da LINQ sorgusunun SQL'e çevrilişini adım adım izliyoruz: deferred execution, ToQueryString ve LogTo, filtreleme, sıralama ve sayfalama, projection, First/Single/Find farkı, son Select'te izin verilen client evaluation ve sessizce bütün tabloyu çeken IEnumerable tuzağı.