Udostępnij za pośrednictwem


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.
  • 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) i decimal(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.