Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
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'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 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.
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 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.
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 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 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 Interceptor'ları ve Event'leri: Audit Alanları ve Yavaş Sorgu Logu
SaveChangesInterceptor ile CreatedAt ve UpdatedAt alanlarını otomatik dolduruyor, DbCommandInterceptor ile eşiği aşan sorguları logluyor, SavingChanges ve StateChanged event'leriyle change tracker'ı canlı izliyoruz. Async override'ı unutunca neden hiçbir şeyin çalışmadığını da görüyoruz.
EF Core ile Test: SQLite In-Memory ve InMemory Provider Tuzakları
InMemory provider'ın unique index'i, foreign key'i ve raw SQL'i nasıl sessizce geçtiğini gerçek test çıktılarıyla görüyor, SQLite in-memory ile gerçekçi testler kuruyoruz. Aynı context'te assert etmenin yarattığı yalancı yeşili ve DbContext'i soyutlama tartışmasını EF dokümantasyonunun önerileriyle ele alıyoruz.
EF Core ve Mimari: Repository, CQRS'in Okuma Tarafı ve Dapper'a Geçiş
Generic repository'nin WHERE'i nasıl sessizce belleğe taşıdığını gerçek SQL ile görüyor, DbContext'in zaten bir unit of work olduğunu tartışıyoruz. Aggregate'e özel repository, CQRS okuma tarafında projection ve aynı connection ile transaction'ı paylaşan Dapper ile kemik yapıyı tamamlıyoruz.
Eski Projeler: EF Core 3.1 ve EF Core 5'ten EF Core 6'ya Geçiş
EF Core 3.0'da client evaluation'ın kalkması, FromSql'in FromSqlRaw/FromSqlInterpolated'a bölünmesi, EF Core 5'in many-to-many, filtered include ve split query'si, EF Core 6'ya geçerken Nullable'ın migration'lara etkisi ve destek durumları.