Integracja programu Entity Framework Core MSBuild
Począwszy od programu EF 9, możesz użyć zadania MSBuild, aby wygenerować skompilowany model i wstępnie skompilowane zapytania automatycznie, gdy projekt zostanie skompilowany lub opublikowany. Jest to przeznaczone głównie do użycia z publikowaniem nativeAOT.
Ostrzeżenie
Obsługa nativeAOT i integracja z programem MSBuild są funkcjami eksperymentalnymi i nie są jeszcze odpowiednie do użytku produkcyjnego.
Instalowanie zadań
Aby rozpocząć, zainstaluj pakiet NuGet Microsoft.EntityFrameworkCore.Tasks . Na przykład:
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Uwaga
Każdy projekt, który należy skompilować z wygenerowanymi plikami, powinien odwoływać się do pakietu NuGet, ale nie jest domyślnie przechodni.
Korzystanie z zadań
Jeśli projekt określi <PublishAot>true</PublishAot>
to domyślnie zadanie MSBuild wygeneruje skompilowany model i wstępnie skompilowane zapytania podczas publikowania. W przeciwnym razie można ustawić następujące właściwości, aby kontrolować zachowanie generowania:
Właściwość MSBuild | opis |
---|---|
EFOptimizeContext | Ustaw wartość na , aby true włączyć integrację programu MSBuild. |
EFScaffoldModelStage | Ustaw wartość publish , build lub none , aby wskazać, na którym etapie zostanie wygenerowany skompilowany model. Wartość domyślna to publish . |
EFPrecompileQueriesStage | Ustaw wartość publish , build lub none , aby wskazać, na którym etapie zostaną wygenerowane wstępnie skompilowane zapytania. Wartość domyślna to publish . |
DbContextName | Klasa pochodna DbContext do użycia. Tylko nazwa klasy lub w pełni kwalifikowana z przestrzeniami nazw. Jeśli ta opcja zostanie pominięta, program EF Core wykona generowanie dla wszystkich klas kontekstowych w projekcie. |
EFTargetNamespace | Przestrzeń nazw do użycia dla wszystkich wygenerowanych klas. Jeśli ta opcja zostanie pominięta, program EF Core będzie używać polecenia $(RootNamespace) . |
EFOutputDir | Folder do umieszczania wygenerowanych plików przed skompilowanym projektem. Jeśli ta opcja zostanie pominięta, program EF Core będzie używać polecenia $(IntermediateOutputPath) . |
EfNullable | Określa, czy typy odwołań dopuszczane do wartości null będą używane w wygenerowanym kodzie. Jeśli ta opcja zostanie pominięta, program EF Core będzie używać polecenia $(Nullable) . |
Ograniczenia
- W przypadku korzystania z integracji na etapie
publish
należy również ustawić identyfikator rid w projekcie startowym (np. <RuntimeIdentifier>win-x64</RuntimeIdentifier>) - Nie można określić innego projektu startowego podczas korzystania z tego podejścia, ponieważ wprowadza odwrotną zależność kompilacji. Oznacza to, że projekt kontekstu musi być autosuficientny pod względem konfiguracji, więc jeśli aplikacja zwykle konfiguruje kontekst przy użyciu konstruktora hostów w innym projekcie, należy zaimplementować <> w projekcie kontekstowym.
- Ponieważ projekt musi być kompilowany przed wygenerowaniem skompilowanego modelu, takie podejście nie obsługuje częściowych implementacji metod dostosowywania skompilowanego modelu.
- Obecnie zawsze wygeneruje to dodatkowy kod w skompilowanym modelu, który jest wymagany dla funkcji NativeAOT. Jeśli nie planujesz włączenia funkcji NativeAOT, wygeneruj skompilowany model przy użyciu narzędzi interfejsu wiersza polecenia.