Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Dapper ile Query ve Mapping: Kolonlar Property'lere Nasıl Map Edilir?
Query<T>'nin kolonları property'lere nasıl map ettiğini görüyoruz: büyük-küçük harf duyarsız mapping, sessizce atlanan kolonlar, NULL ve varsayılan değerler, MatchNamesWithUnderscores ve cache tuzağı, dynamic sonuçlar, record'larda constructor mapping'i.
Dapper Nedir? ADO.NET'in Üzerindeki İnce Katman ve İlk Sorgu
Dapper'ı ADO.NET üzerine eklenen extension method'lar olarak tanıyoruz: micro-ORM ne demek, EF Core ile ne zaman hangisi, .NET 10 + Dapper 2.1.89 + SQLite kurulumu, ilk Query ve 1.x'ten Dapper.AOT'ye kısa tarihçe.
EF Core 10 Yenilikleri: Named Query Filter, LeftJoin ve JSON'da Complex Type
EF Core 10 LTS ile isimli query filter'lar ve IgnoreQueryFilters(["..."]), LeftJoin/RightJoin, normal lambda alan ExecuteUpdateAsync, JSON'a map edilen complex type ve ComplexCollection, padding'li parametreli collection'lar, SqlVector ile vektör araması ve SQLite DateTimeOffset breaking change'i.
EF Core 9 Yenilikleri: UseSeeding, Migration Locking ve PendingModelChangesWarning
EF Core 9'da eksik migration'ı Migrate anında yakalayan PendingModelChangesWarning, HasData ve DateTime.Now tuzağı, UseSeeding/UseAsyncSeeding, __EFMigrationsLock ile migration locking, kendiliğinden bulunan compiled model'ler ve EFOptimizeContext, complex type ile ExecuteUpdate.
EF Core 8 Yenilikleri: Complex Type, Primitive Collection ve SqlQuery<T>
EF Core 8 LTS ile gelen primitive collection'lar ve json_each, value object için ComplexProperty, entity olmayan tipler için SqlQuery<T>, no-tracking lazy loading, SQLite'ta JSON ve HierarchyId; Contains'in OPENJSON'a geçmesi ve UseCompatibilityLevel(120).
EF Core 7 Yenilikleri: ExecuteUpdate, ExecuteDelete, JSON Kolonlar ve TPC
EF Core 7 ile gelen ExecuteUpdate/ExecuteDelete, owned type'ı JSON kolona yazan ToJson, TPC inheritance, IMaterializationInterceptor, FromSql ve SqlQuery<int>; Encrypt=True ve HasTrigger gibi breaking change'lerle EF Core 6'dan geçiş.
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ı.
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.
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 Interceptor'ları ve Event'leri: Audit Field'ları ve Yavaş Sorgu Logu
SaveChangesInterceptor ile CreatedAt ve UpdatedAt field'ları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'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 derived class gibi sessiz tuzakları görüyoruz.