Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu, EF6 ile EF Core arasındaki davranış değişikliklerinin kapsamlı olmayan bir listesidir. Uygulamanızı taşırken bu unsurları göz önünde bulundurmanız önemlidir; bunlar, uygulamanızın davranış şeklini değiştirebilir, ancak EF Core'a geçiş yapıldıktan sonra derleme hatası olarak görünmezler.
Bu, taşıma işleminin bir parçası olarak dikkate alınması gereken üst düzey bir inceleme olarak amaçlanır. Daha ayrıntılı, duruma bağlı talimatlar için ayrıntılı vakaları okuyun.
DbSet.Add/Attach ve graph davranışı
EF6'da, bir varlıkta DbSet.Add() çağrılması, gezinti özelliklerinde başvurulan tüm varlıklar için özyinelemeli bir arama ile sonuçlanır. Bulunan ve bağlam tarafından henüz izlenmeyen varlıklar da eklendi olarak işaretlenir.
DbSet.Attach() , tüm varlıkların değişmemiş olarak işaretlenmesi dışında aynı şekilde davranır.
EF Core benzer bir özyinelemeli arama gerçekleştirir ancak biraz farklı kurallar uygular.
- Kök varlık oluşturulan bir anahtar için yapılandırılmışsa ve anahtar ayarlanmadıysa,
Addeddurumuna geçirilir. -
Gezinme özelliklerinin özyinelemeli araması sırasında bulunan varlıklar için:
-
Varlığın birincil anahtarı veritabanı tarafından otomatik oluşturulmuşsa
- Birincil anahtar bir değere ayarlanmadıysa, durum eklenir olarak ayarlanır. Birincil anahtar değeri, özellik türü için CLR varsayılan değeri atanmışsa "ayarlanmadı" olarak kabul edilir (örneğin,
0,intiçin;null,stringiçin vb.). - Birincil anahtar bir değere ayarlanırsa, durum değişmemiş olarak ayarlanır.
- Birincil anahtar bir değere ayarlanmadıysa, durum eklenir olarak ayarlanır. Birincil anahtar değeri, özellik türü için CLR varsayılan değeri atanmışsa "ayarlanmadı" olarak kabul edilir (örneğin,
- Birincil anahtar veritabanı oluşturulmamışsa, varlık kök ile aynı duruma getirilir.
-
Varlığın birincil anahtarı veritabanı tarafından otomatik oluşturulmuşsa
- Bu davranış değişikliği yalnızca
AttachveUpdateyöntemi grupları için geçerlidir.Addanahtar ayarlanmış olsa bile varlıkları her zamanAddeddurumuna getirir. -
Attachyöntemleri, anahtarların ayarlandığıUnchangedvarlıkları duruma koyar. Bu, "yeniyse ekleyin, aksi takdirde yalnız bırakın" yöntemlerini kolaylaştırır.Updateyöntemleri, anahtarların ayarlandığı varlıklarıModifieddurumuna getirir. Bu, "yeniyse ekleyin, aksi takdirde güncelleştirin"i kolaylaştırır.
Buradaki genel felsefe, bağlantısız varlıkların Update eklemelerini ve güncelleştirmelerini işlemenin çok basit bir yoludur. Yeni varlıkların eklenmesini ve mevcut varlıkların güncelleştirilmesini sağlar.
Aynı zamanda, Add yine de varlıkların eklenmesini zorlamanın kolay bir yolunu sağlar. Ekleme, yalnızca depo tarafından oluşturulan anahtarları kullanmadığında kullanışlıdır; böylece EF varlığın yeni olup olmadığını bilmez.
EF Core'daki bu davranışlar hakkında daha fazla bilgi için EF Core'da Değişiklik İzleme'yi okuyun.
Code First veritabanı başlatma
EF6'nın veritabanı bağlantısını seçme ve veritabanını başlatma konularında gerçekleştirdiği pek çok karmaşık işlem bulunmaktadır. Bu kurallardan bazıları şunlardır:
- Yapılandırma gerçekleştirilmezse, EF6 SQL Express veya LocalDb'de bir veritabanı seçer.
- Bağlamla aynı isimde bir bağlantı dizesi uygulamanın
App/Web.configdosyasındaysa, bu bağlantı kullanılacaktır. - Veritabanı yoksa oluşturulur.
- Modeldeki tablolardan hiçbiri veritabanında yoksa, geçerli modelin şeması veritabanına eklenir. Geçişler etkinleştirilirse, veritabanını oluşturmak için kullanılır.
- Veritabanı varsa ve EF6 daha önce şemayı oluşturduysa, şema geçerli modelle uyumlu olup olmadığını denetler. Şema oluşturulduktan sonra model değiştiyse bir istisna fırlatılır.
EF Core bu sihrin hiçbirini gerçekleştirmez.
- Veritabanı bağlantısının kodda açıkça yapılandırılması gerekir.
- Başlatma yapılmaz. Geçişleri uygulamak için (veya
DbContext.Database.Migrate()veDbContext.Database.EnsureCreated()geçişleri kullanmadan veritabanını oluşturmak/silmek için) kullanmanızEnsureDeleted()gerekir.
Code First tablo adlandırma kuralı
EF6, varlığın eşlendiği varsayılan tablo adını hesaplamak için çoğullaştırma hizmeti aracılığıyla varlık sınıfı adını çalıştırır.
EF Core, özelliğin türetilmiş bağlamda yer aldığı varlığın DbSet adını kullanır. Varlığın özelliği DbSet yoksa, sınıf adı kullanılır.
Daha fazla bilgi için Bkz. Veritabanı Şemalarını Yönetme.