EF6'dan EF Core'a Taşımayla İlgili Ayrıntılı Servis Talepleri

Bu belgede EF6 ile EF Core arasındaki bazı belirli farklar ayrıntılı olarak açıkilmektedir. Kodunuzu taşıma sırasında bu kılavuza bakın.

Veritabanı bağlantısını yapılandırma

EF6'nın ef core ile karşılaştırıldığında çeşitli veri kaynaklarına bağlanma şekli arasında çeşitli farklar vardır. Kodunuzun ne zaman taşınabilir olduğunu anlamanız önemlidir.

  • Bağlan ion dizeleri: EF Core, EF6'nın yaptığı gibi farklı bağlantı dizesi için birden çok oluşturucu aşırı yüklemesini doğrudan desteklemez. Bunun yerine DbContextOptions'a dayanır. Türetilmiş türlerde birden çok oluşturucu aşırı yüklemesi sağlamaya devam edebilirsiniz, ancak seçenekler aracılığıyla bağlantıları eşlemeniz gerekir.
  • Yapılandırma ve önbellek: EF Core, dış hizmet sağlayıcılarına bağlanabilen bir iç altyapı ile bağımlılık eklemenin daha sağlam ve esnek bir uygulamasını destekler. Bu, önbelleklerin boşaltılması gereken durumları işlemek için uygulama tarafından yönetilebilir. EF6 sürümü sınırlıydı ve boşaltılamadı.
  • Yapılandırma dosyaları: EF6, sağlayıcıyı içerebilen yapılandırma dosyaları aracılığıyla yapılandırmayı destekler. EF Core, sağlayıcı derlemesine ve açık sağlayıcı kaydına (örn. UseSqlServer) doğrudan başvuru gerektirir.
  • Bağlan ion fabrikaları: EF6 tarafından desteklenen bağlantı fabrikaları. EF Core, bağlantı fabrikalarını desteklemez ve her zaman bir bağlantı dizesi gerektirir.
  • Günlüğe kaydetme: Genel olarak EF Core'da günlüğe kaydetme çok daha güçlüdür ve hassas yapılandırma için birden çok seçeneğe sahiptir.

Kurallar

EF6 tarafından desteklenen özel ("basit") kurallar ve model kuralları. Basit kurallar EF Core'un kural öncesi model yapılandırmasına benzer. Diğer kurallar, model oluşturmanın bir parçası olarak desteklenir.

EF6, model oluşturulduktan sonra kuralları çalıştırır. EF Core, model oluşturulurken bunları uygular. EF Core'da, dbContext ile etkin oturumlardan model oluşturma ayırma işlemi yapabilirsiniz. Kurallarla başlatılan bir model oluşturmak mümkündür.

Veri doğrulaması

EF Core veri doğrulamayı desteklemez ve yalnızca modeli ve geçişleri oluşturmak için veri ek açıklamalarını kullanır. Web/MVC'den WinForms ve WPF'ye kadar çoğu istemci kitaplığı, kullanılacak bir veri doğrulama uygulaması sağlar.

Yakında sunulacak özellikler

EF6'da henüz EF Core'da mevcut olmayan ancak ürün yol haritasında yer alan birkaç özellik vardır.

  • Ef6'da "varlık bölme" ile birlikte beton başına tablo türü (TPC) desteklendi. TPC, EF7 yol haritasındadır.
  • EF6'da saklı yordam eşlemesi , oluşturma, güncelleştirme ve silme işlemlerini saklı yordamlara devretmenizi sağlar. EF Core şu anda yalnızca okuma işlemleri için saklı yordamlara eşlemeye izin verir. OLUŞTURMA, güncelleştirme ve silme (CUD) desteği EF7 yol haritasındadır.
  • EF6'daki karmaşık türler , EF Core'daki sahip olunan türlere benzer. Ancak, tüm yetenek kümesi EF7'deki değer nesneleriyle ele alınacaktır.

ObjectContext'i geride bırakın

EF Core yerine DbContext ObjectContextkullanır. IObjectContextAdapter kullanan kodu güncelleştirmeniz gerekir. Bu, bazen ile PreserveChanges sorgular veya OverwriteChanges birleştirme seçeneği için kullanılırdı. EF Core'daki benzer özellikler için Reload yöntemine bakın.

Model yapılandırması

EF6 ve EF Core modellerinin nasıl tasarlandığı arasında birçok önemli fark vardır. EF Core koşullu eşleme için tam destekten yoksun. Model oluşturucu sürümleri yoktur.

Diğer farklılıklar şunlardır:

Tür bulma

EF Core'da Varlık Türleri altyapı tarafından üç şekilde bulunur:

  • takip etmek istediğiniz türün bulunduğu yerde TEntity bir'i DbSet<TEntity>DbContext kullanıma sunun.
  • Kodunuzda bir yerden başvuruda Set<TEntity> bulun.
  • Bulunan türler tarafından başvurulan karmaşık türler özyinelemeli olarak bulunur (örneğin, ve BlogPost başvurularınız Blog bulunabilirse, Post de bulunur)

Derlemeler türetilmiş türler için taranmıyor .

Eşleme

.Map() EF6'daki uzantı, EF Core'daki aşırı yüklemeler ve uzantı yöntemleriyle değiştirilmiştir. Örneğin, 'yi kullanabilirsiniz. HasDiscriminator()' öğesini kullanarak hiyerarşi başına tablo (TPH) yapılandırır. Bkz. Devralmayı Modelleme.

Devralma eşlemesi

EF6, hiyerarşi başına tablo (TPH), tür başına tablo (TPT) ve beton sınıf başına tablo (TPC) desteği sağladı ve hiyerarşinin farklı düzeylerinde farklı tatların karma eşlemesini etkinleştirdi. EF Core, tek yönlü modellenecek bir devralma zinciri (TPT veya TPH) gerektirmeye devam edecektir ve plan EF7'de TPC desteği eklemektir.

Bkz. Devralmayı Modelleme.

Öznitelikler

EF6 özelliklerde desteklenen dizin öznitelikleri. EF Core'da bunlar, bileşik dizin gerektiren senaryolar için daha kolay olması gereken tür düzeyinde uygulanır. EF Core, veri ek açıklamalarıyla bileşik anahtarları desteklemez (örneğin, Birlikte Sipariş Ver'i ColumnAttributeKeyAttributekullanma).

Daha fazla bilgi için bkz. Dizinler ve kısıtlamalar.

Gerekli ve isteğe bağlı

EF Core model oluşturmada yalnızca IsRequired asıl uçta gerekenleri yapılandırılır. HasForeignKey şimdi asıl ucu yapılandırıyor. Kodunuzu taşımanız daha kolay .Navigation().IsRequired() olacaktır. Örnek:

EF6:

modelBuilder.Entity<Instructor>()
    .HasRequired(t => t.OfficeAssignment)
    .WithRequiredPrincipal(t => t.Instructor);

EF Core 6:

modelBuilder.Entity<Instructor>()
    .HasOne(t => t.OfficeAssignment)
    .WithOne(t => t.Instructor)
    .HasForeignKey<OfficeAssignment>();

modelBuilder.Entity<Instructor>()
    .Navigation(t => t.OfficeAssignment)
    .IsRequired();

modelBuilder.Entity<OfficeAssignment>()
    .Navigation(t => t.Instructor)
    .IsRequired();

Varsayılan olarak her şey isteğe bağlıdır, bu nedenle genellikle çağrısı .IsRequired(false)yapılması gerekmez.

Uzamsal destek

EF Core, uzamsal destek sağlamak için üçüncü taraf kitaplık topluluk kitaplığı NetTopologySuite ile tümleşir.

Bağımsız ilişkilendirmeler

EF Core bağımsız ilişkilendirmeleri desteklemez (iki varlık arasındaki ilişkinin varlıklardan bağımsız olarak tanımlanmasını sağlayan bir EDM kavramı). EF Core'da desteklenen benzer bir kavram gölge özelliklerdir.

Geçişler

EF Core, veritabanı başlatıcıları veya otomatik geçişleri desteklemez. EF Core'da olmasa migrate.exe da geçiş paketleri oluşturabilirsiniz.

Visual Studio Araçları

EF Core'un tasarımcısı, veritabanından modeli güncelleştirme işlevselliği ve model öncelikli akışı yoktur. Tersine mühendislik sihirbazı ve yerleşik şablon yoktur.

Bu özellikler EF Core ile birlikte gönderilmese de, ek araçlar sağlayan işletim sistemi topluluk projeleri vardır. Özellikle, EF Core Power Tools şunları sağlar:

  • Veritabanı projeleri.dacpac () desteğiyle Visual Studio'dan tersine mühendislik. Şablon tabanlı kod özelleştirmeleri içerir.
  • Model grafı ve betik oluşturma ile DbContext görsel incelemesi.
  • Gui kullanarak Visual Studio'dan geçişlerin yönetimi.

Topluluk araçlarının ve uzantılarının tam listesi için bkz. EF Core Araçları ve Uzantıları.

Değişiklik izleme

EF6 ve EF Core'un değişiklik izlemeyle ilgilenmesi arasında birkaç fark vardır. Bunlar aşağıdaki tabloda özetlenir:

Özellik EF6 EF Core
Varlık Durumu Grafiğin tamamını ekler/ekler Ayrılmış varlıklara yönelik gezintileri destekler
Yetim Korunmuş Silindi
Bağlantısı kesilmiş, kendi kendine izleme varlıkları Desteklenir Desteklenmez
Mutasyon Özellikler üzerinde gerçekleştirilir Yedekleme alanlarında gerçekleştirilir*
Veri bağlama .Local .Local artı .ToObservableCollection veya .ToBindingList
Değişiklik algılama Tam grafik Varlık başına

* Varsayılan olarak, EF Core'da özellik bildirimi tetiklenmez, bu nedenle bildirim varlıklarını yapılandırmak önemlidir.

EF Core'un değişiklik algılamayı EF6 kadar sık çağırmadığını unutmayın.

EF Core, değişiklik izleyicisi için ayrıntılı DebugView bir bilgi sağlar. Daha fazla bilgi edinmek için bkz . İzleyici Hata Ayıklamayı Değiştirme.

Sorgular

EF6,EF Core'da bulunmayan bazı sorgu özelliklerine sahiptir. Bu modüller şunlardır:

  • Bazı yaygın C# işlevi ve SQL işlevi eşlemeleri.
  • Sorgular ve güncelleştirmeler için komut ağacının kesilmesi.
  • Tablo değerli parametreler (TVP' ler) desteği.

EF6, yavaş yüklenen proxy'ler için yerleşik desteğe sahiptir. Bu, EF Core için bir kabul paketidir (bkz. İlgili Verilerin Gecikmeli Yüklenmesi).

EF Core kullanarak FromSQLham SQL üzerinden oluşturmanızı sağlar.