Zmiany zachowania między ef6 i EF Core

Jest to niewyczerpująca lista zmian zachowania między platformami EF6 i EF Core. Ważne jest, aby pamiętać o tym, że port aplikacji może zmieniać sposób działania aplikacji, ale nie będzie wyświetlany jako błędy kompilacji po zamianie na program EF Core.

Jest to przegląd wysokiego poziomu, który należy wziąć pod uwagę w ramach procesu przenoszenia. Aby uzyskać bardziej szczegółowe instrukcje dotyczące wielkości liter, zapoznaj się ze szczegółowymi przypadkami.

DbSet.Add/Attach and graph behavior (Zachowanie elementu DbSet.Add/Attach i graph)

W programie EF6 wywołanie DbSet.Add() jednostki powoduje cykliczne wyszukiwanie wszystkich jednostek przywoływalnych we właściwościach nawigacji. Wszystkie znalezione jednostki i nie są jeszcze śledzone przez kontekst, są również oznaczone jako dodane. DbSet.Attach() zachowuje się tak samo, z wyjątkiem wszystkich jednostek są oznaczone jako niezmienione.

Program EF Core wykonuje podobne wyszukiwanie cyklicznego, ale z nieco różnymi regułami.

  • Jeśli jednostka główna jest skonfigurowana dla wygenerowanego klucza, a klucz nie jest ustawiony, zostanie on umieszczony w Added stanie .
  • W przypadku jednostek znalezionych podczas cyklicznego wyszukiwania właściwości nawigacji:
    • Jeśli klucz podstawowy jednostki jest generowany
      • Jeśli klucz podstawowy nie jest ustawiony na wartość, stan zostanie ustawiony na wartość dodaną. Wartość klucza podstawowego jest uznawana za "nie ustawioną", jeśli ma przypisaną wartość domyślną CLR dla typu właściwości (na przykład 0 dla int, dla , null dla string, itp.).
      • Jeśli klucz podstawowy jest ustawiony na wartość, stan jest ustawiony na niezmieniony.
    • Jeśli klucz podstawowy nie jest generowany, jednostka jest umieszczana w tym samym stanie co katalog główny.
  • Ta zmiana zachowania dotyczy Attach tylko grup metod i .Update Add zawsze umieszcza jednostki w Added stanie, nawet jeśli klucz jest ustawiony.
  • Attach metody umieszczają jednostki z kluczami ustawionymi w Unchanged stanie . Ułatwia to "wstawienie go, jeśli nowe, w przeciwnym razie pozostaw go w spokoju". Update metody umieszczają jednostki z kluczami ustawionymi w Modified stanie . Ułatwia to "wstawienie go, jeśli nowe, w przeciwnym razie zaktualizowanie go".

Ogólna filozofia polega na tym, że Update jest to bardzo prosty sposób obsługi wstawień i aktualizacji odłączonych jednostek. Gwarantuje to, że wszystkie nowe jednostki zostaną wstawione, a wszystkie istniejące jednostki zostaną zaktualizowane.

Add Jednocześnie nadal zapewnia łatwy sposób wymuszenia wstawiania jednostek. Dodawanie jest przydatne tylko wtedy, gdy nie używasz kluczy generowanych przez magazyn, tak aby program EF nie wiedział, czy jednostka jest nowa, czy nie.

Aby uzyskać więcej informacji na temat tych zachowań w programie EF Core, przeczytaj Change Tracking in EF Core (Śledzenie zmian w programie EF Core).

Inicjowanie bazy danych Code First

Program EF6 ma znaczną ilość magii, którą wykonuje podczas wybierania połączenia z bazą danych i inicjowania bazy danych. Niektóre z tych reguł obejmują:

  • Jeśli nie zostanie wykonana żadna konfiguracja, program EF6 wybierze bazę danych w usłudze SQL Express lub LocalDb.
  • Jeśli parametry połączenia o tej samej nazwie co kontekst znajduje się w pliku aplikacjiApp/Web.config, to połączenie zostanie użyte.
  • Jeśli baza danych nie istnieje, zostanie utworzona.
  • Jeśli żadna z tabel z modelu nie istnieje w bazie danych, schemat bieżącego modelu zostanie dodany do bazy danych. Jeśli migracje są włączone, są one używane do tworzenia bazy danych.
  • Jeśli baza danych istnieje i program EF6 wcześniej utworzył schemat, schemat jest sprawdzany pod kątem zgodności z bieżącym modelem. Wyjątek jest zgłaszany, jeśli model uległ zmianie od czasu utworzenia schematu.

Program EF Core nie wykonuje żadnej z tych magii.

  • Połączenie z bazą danych musi być jawnie skonfigurowane w kodzie.
  • Nie jest wykonywana inicjalizacja. Należy użyć DbContext.Database.Migrate() polecenia , aby zastosować migracje (lub DbContext.Database.EnsureCreated() i EnsureDeleted() , aby utworzyć/usunąć bazę danych bez użycia migracji).

Konwencja nazewnictwa tabel Code First

Program EF6 uruchamia nazwę klasy jednostki za pośrednictwem usługi pluralizacji, aby obliczyć domyślną nazwę tabeli mapowanej na jednostkę.

Program EF Core używa nazwy DbSet właściwości uwidocznionej w obiekcie w kontekście pochodnym. Jeśli jednostka nie ma DbSet właściwości, używana jest nazwa klasy.

Aby uzyskać więcej informacji, zobacz Zarządzanie schematami bazy danych.