Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 = await db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToListAsync();
}
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);
await db.SaveChangesAsync();
}
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.