EF Core 11: migration'lar takım çalışması için kolaylaşıyor
EF Core 11, migration iş akışındaki günlük sürtünmeleri azaltan bir dizi değişiklik getiriyor. Foreign key constraint'i veritabanına yazmadan ilişkiyi modelde tutma, merge sırasında ayrışmış migration'ları yakalayan model snapshot, tek komutta migration oluşturup uygulama ve dotnet ef için yapılandırma dosyası bunlardan bazıları. Takım halinde çalışan her .NET ekibi bu değişikliklerden doğrudan etkilenecek.
Kilit noktalar
- `ExcludeForeignKeyFromMigrations()` ilişkiyi modelde tutar, foreign key constraint'i migration'a yazmaz; OrderId index'i korunur
- Constraint kalktığında orphan satır ve cascade delete koruması da kalkar, bütünlük uygulama tarafında sağlanmalı
- Model snapshot son migration ID'sini tutuyor: iki branch'in migration'ları artık merge sırasında çakışma veriyor
- `dotnet ef database update <Migration> --add` migration'ı Roslyn ile derleyip aynı komutta uygular
- `.config/dotnet-ef.json` içinde project, startupProject ve context varsayılanları tutulabilir; komut satırı her zaman önceliklidir
- `--context "*"` ile migrations list, script, database update ve drop tüm DbContext'ler için çalıştırılabilir
EF Core 11, .NET 11 ile birlikte geliyor ve migration tarafında takım çalışmasını hedefleyen değişiklikler içeriyor. Yeni `ExcludeForeignKeyFromMigrations()` çağrısı, ilişkiyi navigation property'leri ve change tracking ile birlikte modelde tutarken foreign key constraint'in veritabanına eklenmesini engelliyor; OrderId üzerindeki index yine oluşturuluyor. Model snapshot artık son migration'ın ID'sini tuttuğu için iki branch'in eklediği migration'lar merge sırasında çakışma olarak görünüyor.
`database update --add` seçeneği migration'ı Roslyn ile derleyip aynı adımda uyguluyor; dosyalar yine diske yazılıyor. `.config/dotnet-ef.json` dosyası `--project` ve `--startup-project` yazma zorunluluğunu kaldırıyor, `--context "*"` ise komutları projedeki tüm DbContext'ler için çalıştırıyor.
Gerçek dünyada kullanımı
- Şeması eski bir legacy veritabanına bağlanan ve mevcut veri yüzünden foreign key constraint ekleyemeyen bir uygulamayı EF Core'a taşımak
- Kayıtları başka bir sistemden sırasız alan bir import/senkronizasyon işinde order line'ların order'dan önce gelmesine izin vermek
- Clean Architecture çözümünde DbContext Infrastructure'da, connection string Web projesindeyken her komutta uzun parametre yazmaktan kurtulmak
- Ana domain ve audit log için ayrı DbContext kullanan bir projede test veritabanını tek komutla sıfırlayıp migration'ları uygulamak
Neden önemli
Migration'lar her ekibin sürekli dokunduğu bir alan; bu değişiklikler merge çakışmasını haftalar sonra değil birleştirme anında gösteriyor ve yeni geliştiricilerin öğrenmesi gereken uzun komutları ortadan kaldırıyor.
Benzer haberler
- EF Core vs redb: 54 tabloya karşı nesne grafiği ve IncludeDEV Community: #dotnet1 gün önce
- Agent Framework builder skill'leri .NET ve Python coding agent'lar için yayındaMicrosoft Agent Framework Blog1 gün önce
- Giderek büyüyen handler imzası: minimal API'lerde [AsParameters] kullanımıDEV Community: #aspnetcore1 gün önce