Aracılığıyla paylaş


EF6 ile EF Core Arasındaki Davranış Değişiklikleri

Bu, EF6 ile EF Core arasındaki davranış değişikliklerinin kapsamlı olmayan bir listesidir. Bunları uygulamanızın bağlantı noktası olarak göz önünde bulundurmanız önemlidir; bunlar uygulamanızın davranış şeklini değiştirebilir, ancak EF Core'a değiştirildikten sonra derleme hataları olarak gösterilmez.

Bu, taşıma işleminin bir parçası olarak dikkate alınması gereken üst düzey bir inceleme olarak amaçlanır. Büyük/küçük harfe göre daha ayrıntılı yönergeler için ayrıntılı servis taleplerini okuyun.

DbSet.Add/Attach ve graph davranışı

EF6'da, bir varlıkta çağrılması DbSet.Add() , gezinti özelliklerinde başvuruda bulunılan tüm varlıklar için özyinelemeli bir aramayla sonuçlanmıştı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, duruma geçirilir Added .
  • Gezinti özellikleri özyinelemeli arama sırasında bulunan varlıklar için:
    • Varlığın birincil anahtarı depo oluşturulduysa
      • Birincil anahtar bir değere ayarlanmadıysa, durum eklenir olarak ayarlanır. Özellik türü için CLR varsayılan değeri atanmışsa birincil anahtar değeri "ayarlanmadı" olarak kabul edilir (örneğin, için intnull string, 0 vb.).
      • Birincil anahtar bir değere ayarlanırsa, durum değişmemiş olarak ayarlanır.
    • Birincil anahtar veritabanı oluşturulmamışsa, varlık kök ile aynı duruma getirilir.
  • Bu davranış değişikliği yalnızca ve Update yöntemi grupları için Attach geçerlidir. Add anahtar ayarlanmış olsa bile varlıkları Added her zaman duruma getirir.
  • Attach yöntemleri, anahtarların ayarlandığı Unchanged varlıkları duruma koyar. Bu, "yeniyse ekleyin, aksi takdirde yalnız bırakın" Update ı kolaylaştırır. yöntemleri, anahtarların ayarlandığı Modified varlıkları duruma koyar. 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 okuyun.

Code First veritabanı başlatma

EF6' nın veritabanı bağlantısını seçip veritabanını başlatma konusunda gerçekleştirdiği önemli miktarda sihri vardı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ı ada sahip bir bağlantı dizesi uygulamanın App/Web.config dosyasında yer alırsa, bu bağlantı kullanılı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 özel durum oluşturulur.

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.EnsureCreated() ve EnsureDeleted() geçişleri kullanmadan veritabanını oluşturmak/silmek için) kullanmanız DbContext.Database.Migrate() 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, varlığın DbSet türetilmiş bağlamda kullanıma sunulduğu özelliğin 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.