Entity Framework Core

Entity Framework (EF) Core, popüler Entity Framework veri erişim teknolojisinin basit, genişletilebilir, açık kaynaklı ve platformlar arası bir sürümüdür.

EF Core, nesne ilişkisel bir eşleyici (O/RM) olarak görev yapabilir ve bu şunları getirir:

  • .NET geliştiricilerinin .NET nesnelerini kullanarak bir veritabanıyla çalışmasını sağlar.
  • Genellikle yazılması gereken veri erişim kodunun çoğuna olan ihtiyacı ortadan kaldırır.

EF Core birçok veritabanı altyapısını destekler. Ayrıntılar için bkz. Veritabanı Sağlayıcıları.

Model

EF Core ile veri erişimi bir model kullanılarak gerçekleştirilir. Model, varlık sınıflarından ve veritabanıyla bir oturumu temsil eden bir bağlam nesnesinden oluşur. Bağlam nesnesi, verileri sorgulamaya ve kaydetmeye olanak tanır. Daha fazla bilgi için bkz. Model Oluşturma.

EF aşağıdaki model geliştirme yaklaşımlarını destekler:

  • Mevcut bir veritabanından model oluşturma.
  • Veritabanını eşleştirmek için modeli el ile kodlayın.
  • Model oluşturulduktan sonra EF Migrations'ı kullanarak modelden bir veritabanı oluşturun. Geçişler, model değiştikçe veritabanının gelişmesine olanak tanır.
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

namespace Intro;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public int Rating { get; set; }
    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

Sorgulama

Varlık sınıflarınızın örnekleri, Dil Tümleşik Sorgusu (LINQ) kullanılarak veritabanından alınır. Daha fazla bilgi için bkz. Verileri Sorgulama.

using (var db = new BloggingContext())
{
    var blogs = db.Blogs
        .Where(b => b.Rating > 3)
        .OrderBy(b => b.Url)
        .ToList();
}

Verileri kaydetme

Veriler, varlık sınıflarınızın örnekleri kullanılarak veritabanında oluşturulur, silinir ve değiştirilir. Daha fazla bilgi edinmek için bkz. Veri Kaydetme.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Add(blog);
    db.SaveChanges();
}

EF O/RM ile ilgili dikkat edilmesi gerekenler

EF Core birçok programlama ayrıntısını soyutlama konusunda iyi olsa da, üretim uygulamalarında sık karşılaşılan tuzakları önlemeye yardımcı olacak her O/RM için geçerli olan bazı en iyi yöntemler vardır:

  • Yüksek performanslı üretim uygulamalarında mimari oluşturmak, hata ayıklamak, profil oluşturmak ve verileri geçirmek için, temel alınan veritabanı sunucusu hakkında orta veya üst düzeyde bilgi gerekir. Örneğin birincil ve yabancı anahtarlar, kısıtlamalar, dizinler, normalleştirme, DML ve DDL deyimleri, veri türleri, profil oluşturma vb.
  • İşlevsel ve tümleştirme testi: Aşağıdakiler için üretim ortamını mümkün olduğunca yakından çoğaltmak önemlidir:
    • Uygulamada yalnızca veritabanı sunucusunun belirli bir sürümleri kullanılırken beliren sorunları bulun.
    • EF Core ve diğer bağımlılıkları yükseltirken derleme yapılamamasına neden olan değişiklikleri yakalayın. Örneğin, ASP.NET Core, OData veya AutoMapper gibi çerçeveleri ekleme veya yükseltme. Bu bağımlılıklar EF Core'u beklenmedik şekillerde etkileyebilir.
  • Temsili yüklerle performans ve stres testleri. Bazı özelliklerin yalın kullanımı iyi ölçeklenmez. Örneğin, birden çok koleksiyon Include ile kullanılması, yoğun gecikmeli yükleme kullanımı, dizini oluşturulmamış sütunlarda koşullu sorgular, depo tarafından oluşturulan değerlerde çok büyük müktarlarda güncelleştirme ve ekleme, eşzamanlılık işleme eksikliği, büyük modeller, yetersiz önbellek ilkesi.
  • Güvenlik incelemesi: Örneğin, bağlantı dizelerinin ve diğer gizli dizilerin işlenmesi, dağıtım dışı işlem için veritabanı izinleri, ham SQL için giriş doğrulaması, hassas veriler için şifreleme.
  • Günlüğe kaydetme ve tanılamanın yeterli ve kullanılabilir olduğundan emin olun. Örneğin, uygun günlük yapılandırması, sorgu etiketleri ve Application Insights.
  • Hata kurtarması. Sürüm geri alma, geri devretme sunucuları, ölçeği genişletme ve yük dengeleme, DoS hafifletme ve veri yedeklemeleri gibi yaygın hata senaryoları için olasılıklara hazırlanın.
  • Uygulama dağıtımı ve geçiş. Dağıtım sırasında geçişlerin nasıl uygulanacağını planlayın. Bu, uygulama başlatmada yapılırsa eşzamanlılık sorunlarıyla karşılaşabilir ve normal işlem için gerekenden daha yüksek izinler gerektirir. Geçiş sırasında önemli hatalardan kurtulmayı kolaylaştırmak için hazırlama kullanın. Daha fazla bilgi için bkz. Geçişleri Uygulama.
  • Oluşturulan geçişlerin ayrıntılı olarak incelenmesi ve test edilmesi. Geçişler, üretim verilerine uygulanmadan önce kapsamlı olarak test edilmelidir. Tablolar üretim verileri içermeye başladıktan sonra şemanın şekli ve sütun türleri kolayca değiştirilemez. Örneğin, SQL Server'da nvarchar(max) ve decimal(18, 2) dize ve ondalık değer türündeki özelliklere eşlenen sütunlar için nadiren en iyi türlerdir, ancak özel senaryonuz hakkında bilgi sahibi olmadığı EF'nin kullandığı varsayılan türler bunlardır.

Sonraki adımlar

Giriş düzeyindeki öğreticiler için bkz. Entity Framework Core'u Kullanmaya Başlama.