Entity Framework Core

Entity Framework (EF) Core je odlehčená, rozšiřitelná, opensourcová a multiplatformní verze oblíbené technologie pro přístup k datům Entity Framework.

EF Core může sloužit jako objektově relační mapovač (O/RM), což:

  • Umožňuje vývojářům .NET pracovat s databází pomocí objektů .NET.
  • Eliminuje potřebu většiny kódu pro přístup k datům, který je obvykle třeba napsat.

EF Core podporuje mnoho databázových strojů. Podrobnosti najdete v tématu Poskytovatelé databází.

Model

Přístup k datům se s EF Core provádí pomocí modelu. Model se skládá z tříd entit a kontextového objektu, který představuje relaci s databází. Kontextový objekt umožňuje dotazování a ukládání dat. Další informace najdete v tématu Vytvoření modelu.

EF podporuje následující přístupy k vývoji modelů:

  • Vygenerujete model z existující databáze.
  • Ručně napíšete kód modelu tak, aby odpovídal databázi.
  • Po vytvoření modelu pomocí migrací EF vytvoříte databázi z modelu. Migrace umožňují vyvíjet databázi při změnách modelu.
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");
    }
}

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; }
}

Dotazování

Instance tříd entit se načítají z databáze pomocí dotazů LINQ (Language Integrated Query). Další informace najdete v tématu Dotazování na data.

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

Ukládání dat

Data se v databázi vytvářejí, odstraňují a upravují pomocí instancí tříd entit. Další informace najdete v tématu Ukládání dat.

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

Důležité informace o mapovači O/RM v EF

EF Core se sice dobře hodí k abstrahování mnoha programovacích detailů, ale existují některé osvědčené postupy, které se dají použít u každého mapovače O/RM a pomáhají vyhnout se běžným úskalím v produkčních aplikacích:

  • Pro návrh architektury, ladění, profilování a migraci dat ve vysokovýkonných produkčních aplikacích je zásadní znalost základního databázového serveru na střední nebo vyšší úrovni. Zahrnuje to například znalost primárních a cizích klíčů, omezení, indexů, normalizace, příkazů DML a DDL, datových typů, profilace atd.
  • Funkční a integrační testování: Je důležité co nejblíže replikovat produkční prostředí, aby:
    • Najít problémy v aplikaci, které se projeví jenom při použití konkrétních verzí nebo edice databázového serveru.
    • Zachytit změny způsobující chybu při upgradu EF Core a dalších závislostí. Zahrnuje to například přidávání nebo upgradování komponent, jako jsou ASP.NET Core, OData nebo AutoMapper. Tyto závislosti můžou ovlivnit EF Core neočekávanými způsoby.
  • Výkonové a zátěžové testování s reprezentativními zatíženími. Naivní využití některých funkcí není dobře škálovatelné. Mezi příklady patří zahrnutí více kolekcí, velké využití opožděného načítání, podmíněné dotazy na neindexované sloupce, masivní aktualizace a vkládání s hodnotami vygenerovanými úložištěm, nedostatečné zpracování souběžnosti, velké modely nebo neadekvátní zásady ukládání do mezipaměti.
  • Kontrola zabezpečení: Sem patří například zpracování připojovacích řetězců a dalších tajných kódů, oprávnění k databázi pro provoz bez nasazení, ověření vstupu pro nezpracovaný kód SQL nebo šifrování citlivých dat.
  • Ujistěte se, že protokolování a diagnostika jsou dostatečné a použitelné. Zahrnuje to například odpovídající konfiguraci protokolování, značky dotazů a Application Insights.
  • Zotavení po chybách. Připravte nápravná opatření pro běžné scénáře selhání, například vrácení verzí, náhradní servery, škálování na více instancí a vyrovnávání zatížení, zmírnění rizik DoS a zálohování dat.
  • Nasazení a migrace aplikace. Naplánujte si, jak se migrace použijí během nasazování. Jejich provedení až při spuštění aplikace by mohlo vyvolat problémy se souběžností a vyžaduje vyšší oprávnění, než je nutné pro normální provoz. Použijte fázování v zájmu snadnějšího zotavení ze závažných chyb během migrace. Další informace najdete v tématu Aplikování migrací.
  • Podrobná kontrola a testování vygenerovaných migrací. Migrace by se měly před použitím na produkční data důkladně otestovat. Jakmile tabulky obsahují produkční data, nejde tvar schématu a typy sloupců tak snadno změnit. Například na SQL Serveru jsou nvarchar(max) a decimal(18, 2) jen zřídka nejvhodnějšími typy sloupců pro mapování na řetězcové a decimální vlastnosti, ale jde o výchozí typy, které EF používá, protože nemá znalosti o vašem konkrétním scénáři.

Další kroky

Úvodní kurzy najdete v tématu Začínáme s Entity Framework Core.