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ě naprogramujte model 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;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; }
}
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)
adecimal(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.