Entity Framework Core
Entity Framework (EF) Core to uproszczona, rozszerzalna i wieloplatformowa wersja open source popularnej technologii dostępu do danych Entity Framework.
Platforma EF Core może służyć jako maper obiektowo-relacyjny (O/RM), który:
- Umożliwia deweloperom platformy .NET pracę z bazą danych przy użyciu obiektów platformy .NET.
- Eliminuje konieczność pisania większości kodu dostępu do danych.
Platforma EF Core obsługuje wiele aparatów baz danych, zobacz Dostawcy baz danych, aby uzyskać szczegółowe informacje.
Model
W przypadku platformy EF Core dostęp do danych jest wykonywany przy użyciu modelu. Model składa się z klas jednostek i obiektu kontekstu, który reprezentuje sesję z bazą danych. Obiekt kontekstu umożliwia wykonywanie zapytań i zapisywanie danych. Aby uzyskać więcej informacji, zobacz Tworzenie modelu.
Platforma EF obsługuje następujące podejścia do tworzenia modeli:
- Generowanie modelu na podstawie istniejącej bazy danych.
- Utwórz kod modelu, aby był zgodny z bazą danych.
- Po utworzeniu modelu użyj funkcji EF Migrations (Migracje EF), aby utworzyć bazę danych na podstawie modelu. Migracje umożliwiają ewolucję bazy danych w miarę zmieniania się 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; }
}
Wykonywanie zapytania
Wystąpienia klas jednostek są pobierane z bazy danych przy użyciu technologii Language Integrated Query (LINQ). Aby uzyskać więcej informacji, zobacz Wykonywanie zapytania o dane.
using (var db = new BloggingContext())
{
var blogs = db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToList();
}
Zapisywanie danych
Dane są tworzone, usuwane i modyfikowane w bazie danych przy użyciu wystąpień klas jednostek. Zobacz Zapisywanie danych, aby dowiedzieć się więcej.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
db.SaveChanges();
}
Zagadnienia związane z maperem O/RM platformy EF
Chociaż platforma EF Core dobrze radzi sobie z abstrakcją wielu szczegółów programowania, istnieją pewne najlepsze rozwiązania dotyczące dowolnego mapera O/RM, które pomagają uniknąć typowych pułapek w aplikacjach produkcyjnych:
- Wiedza na poziomie średnio zaawansowanym lub wyższym na temat bazowego serwera bazy danych jest niezbędna do tworzenia architektury, debugowania, profilowania i migrowania danych w aplikacjach produkcyjnych o wysokiej wydajności. Na przykład znajomość kluczy podstawowych i obcych, ograniczeń, indeksów, normalizacji, instrukcji DML i DDL, typów danych, profilowania itp.
- Testowanie funkcjonalne i integracyjne: ważne jest, aby zreplikować środowisko produkcyjne tak ściśle, jak to możliwe:
- Znajdź problemy w aplikacji, które występują tylko w przypadku korzystania z określonych wersji lub wersji serwera bazy danych.
- Wychwyć zmiany powodujące niezgodność podczas uaktualniania platformy EF Core i inne zależności. Na przykład dodawanie lub uaktualnianie platform, takich jak ASP.NET Core, OData lub AutoMapper. Te zależności mogą wpływać na platformę EF Core w nieoczekiwany sposób.
- Testy wydajnościowe i przeciążeniowe z reprezentatywnymi obciążeniami. Naiwne używanie niektórych funkcji nie jest dobrze skalowalne. Na przykład duża liczba kolekcji, częste korzystanie z ładowania opóźnionego, zapytania warunkowe na nieindeksowanych kolumnach, duże aktualizacje i wstawienia z wartościami generowanymi przez magazyn, brak obsługi współbieżności, duże modele, nieodpowiednie zasady pamięci podręcznej.
- Przegląd zabezpieczeń: na przykład obsługa parametrów połączenia i innych wpisów tajnych, uprawnienia bazy danych do operacji innych niż wdrażanie, weryfikacja danych wejściowych dla nieprzetworzonego kodu SQL, szyfrowanie poufnych danych. Zobacz Bezpieczne przepływy uwierzytelniania, aby uzyskać bezpieczną konfigurację i przepływ uwierzytelniania.
- Upewnij się, że rejestrowanie i diagnostyka są wystarczające i możliwe do wykorzystania. Na przykład odpowiednia konfiguracja rejestrowania, tagi zapytań i usługa Application Insights.
- Odzyskiwanie po błędzie. Przygotuj rozwiązania na wypadek typowych scenariuszy niepowodzeń, takie jak wycofanie wersji, serwery rezerwowe, skalowanie i równoważenie obciążenia, łagodzenie skutków ataków DoS i tworzenie kopii zapasowych danych.
- Migracja i wdrażanie aplikacji. Zaplanuj sposób stosowania migracji podczas wdrażania; wykonanie tej czynności podczas uruchamiania aplikacji może spowodować problemy ze współbieżnością i wymaga wyższych uprawnień, niż jest to konieczne w przypadku normalnego działania. Użyj środowiska przejściowego, aby ułatwić odzyskiwanie po błędach krytycznych podczas migracji. Aby uzyskać więcej informacji, zobacz Stosowanie migracji.
- Szczegółowe badanie i testowanie wygenerowanych migracji. Migracje należy dokładnie przetestować przed zastosowaniem na danych produkcyjnych. Nie można łatwo zmienić kształtu schematu i typów kolumn, gdy tabele zawierają dane produkcyjne. Na przykład w programie SQL Server
nvarchar(max)
idecimal(18, 2)
rzadko są najlepszymi typami dla kolumn mapowanych na właściwości ciągu i wartości dziesiętnych, ale są to wartości domyślne używane przez platformę EF, ponieważ platforma nie ma wiedzy na temat konkretnego scenariusza.
Następne kroki
Aby zapoznać się z samouczkami wprowadzającymi, zobacz Wprowadzenie do platformy Entity Framework Core.