Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Dapper ile Multi-Mapping ve splitOn: İlişkili Verileri Tek Sorguda Okumak
Dapper'da multi-mapping'in row'ları column dilimlerine nasıl böldüğünü, varsayılan splitOn = "Id" hatasını, özel ve virgüllü splitOn'u, 1-N için dictionary pattern'ini ve LEFT JOIN'deki null davranışını görüyor; N+1 problemini JOIN ve IN @ids ile ölçerek çözüyoruz.
Dapper ile Transaction: BeginTransaction, Commit, Rollback ve TransactionScope
Yarım kalan bir siparişten yola çıkıp Dapper'da BeginTransaction, transaction: parametresi, commit ve dispose ile rollback'i kuruyoruz; parametreyi unutmanın SQLite'ta neden sessiz kaldığını, isolation level'ları ve TransactionScope'un async ve SQLite tuzaklarını gerçek çıktılarla görüyoruz.
Dapper ile Async ve Connection Yönetimi: CancellationToken, Pooling ve DI
Dapper'da CancellationToken'ın neden yalnızca CommandDefinition ile gittiğini, SQLite'ta async'in aslında senkron çalıştığını, connection pooling'i, tek connection paylaşmanın neden patladığını ve ASP.NET Core'da connection factory pattern'ini gerçek çıktılarla görüyoruz.
Dapper Execute ile INSERT, UPDATE, DELETE: Etkilenen Satırlar ve Yeni Id
Execute ile INSERT, UPDATE ve DELETE çalıştırıp etkilenen satır sayısını okuyor, yeni id'yi RETURNING ve last_insert_rowid() ile alıyoruz; SQL Server OUTPUT ve PostgreSQL RETURNING farkına bakıp listeyle Execute'un neden bulk olmadığını ölçüyoruz.
Dapper ile Parameter'lar ve SQL Injection: Güvenli Sorgunun Kuralları
String birleştirmenin neden SQL injection'a kapı açtığını gerçek bir saldırıyla görüyor, ardından anonymous object, DynamicParameters, IN @Ids list expansion, DbString ve $ önekini inceliyoruz; ORDER BY @Column gibi sessiz tuzaklarla.
Dapper ile Tek Satır Sorguları: QueryFirst, QuerySingle ve ExecuteScalar
QueryFirst, QueryFirstOrDefault, QuerySingle ve QuerySingleOrDefault'u sıfır, bir ve çok satırla yan yana çalıştırıp hangi exception'ı ne zaman fırlattıklarını görüyoruz; default(T), nullable tipler ve ExecuteScalar<T> tuzaklarıyla.
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ş.