Próbuję wygenerować klasy z bazy danych (pierwsze podejście do bazy danych EntityFramework).
Dla wygody chodzę mniej więcej zgodnie z tym samouczkiem: https://docs.efproject.net/en/latest/platforms/full-dotnet/existing-db.html
Jestem w momencie, w którym uruchamiam odpowiednik tego wiersza kodu w konsoli Menedżera pakietów programu Visual Studio:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Verbose
Ten wiersz kodu generuje błąd (przy włączonym trybie -Verbose):
Using startup project 'EFSandbox'.
Using project 'EntityFrameworkCore'
Build started...
Build failed.
Nie widzę innych opcji, które dają jakiekolwiek znaczące wyniki, i nie widzę dokumentacji dotyczącej tego konkretnego błędu. Jeśli to w ogóle pomaga, ten projekt nie ma obecnie pliku project.json. Wszystko jest w pliku .csproj, którego nie edytowałem ręcznie.
c#
entity-framework-core
LightToTheEnd
źródło
źródło
Odpowiedzi:
Dwie najważniejsze wskazówki:
[1] - Upewnij się, że projekt jest całkowicie kompilowany, zanim uruchomisz nowe polecenie szkieletu.
Inaczej...
[2] - Sprawdź w kontroli źródła lub zrób kopię:
Jeśli masz pecha lub popełnisz błąd, możesz mieć bardzo irytujące problemy z jajkiem i kury.
Inne problemy:
Jeśli masz wiele bibliotek DLL, upewnij się, że nie generujesz do niewłaściwego projektu . Komunikat „Niepowodzenie kompilacji” może wystąpić z wielu powodów, ale najgłupszy byłby, gdybyś nie miał zainstalowanego EFCore w projekcie, w którym tworzysz rusztowanie.
W konsoli menedżera pakietów znajduje się
Default project
lista rozwijana i prawdopodobnie tam trafiły Twoje nowe pliki, jeśli brakuje oczekiwanej zmiany.Lepszym rozwiązaniem niż pamiętanie o ustawieniu listy rozwijanej jest dodanie
-Project
przełącznika do polecenia dotyczącego rusztowania.Oto pełne polecenie, którego używam:
W przypadku EF Core 2
W przypadku EF Core 3
Uwaga: -force nadpisze pliki, ale nie usunie tych, które już nie istnieją. Jeśli usuniesz tabele ze swojej bazy danych, musisz samodzielnie usunąć stare pliki encji (po prostu posortuj w Eksploratorze według daty i usuń stare).
Pełne odniesienie do rusztowania:
EF Core 2:
https://docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext (this
EF Core 3:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
źródło
Wiem, że to stare, ale spędziłem trochę czasu próbując to rozgryźć dzisiaj, więc mam nadzieję, że to komuś pomoże.
Mam projekt .Net Core, ale chcę szkieletować moje pliki do biblioteki klas .Net Standard.
DbContext-Scaffold
w konsoli menedżera pakietów nie działało dla mnie, aledotnet ef dbcontext scaffold
w zwykłym wierszu poleceń tak.Musiałem zainstalować te pakiety w mojej bibliotece klas:
Musiałem mieć projekt .Net Core ustawiony jako projekt startowy w moim rozwiązaniu i ten projekt musiał mieć odniesienie do mojej biblioteki klas . Myślę, że ta ostatnia część jest tym, czego mi brakowało, przez co tak długo drapałem się po głowie.
W końcu wszedłem do biblioteki klas z wiersza poleceń i uruchomiłem to:
dotnet ef dbcontext scaffold "<connection string>" Microsoft.EntityFrameworkCore.SqlServer -o <output folder> -s <relative path to my startup project>
źródło
Ręczne budowanie projektu przez naciśnięcie Ctrl + Shift + B pomogło mi zobaczyć błędy, które powodowały niepowodzenie kompilacji.
źródło
Nadal miałem ten problem, nawet gdy upewniłem się, że mój projekt (z zainstalowanym EF Core) został poprawnie zbudowany. Nadal nie udało się z komunikatem „Budowa nie powiodła się”. wiadomość, która jest widoczna podczas używania
-Verbsose
flagi.Musiałem to zrobić w moim przypadku:
-Project
w poleceniu konsoli Menedżera pakietów, aby wskazać mój nowo utworzony (i udostępniony EF Core) projekt. Ostatni krok był po prostu na miarę, ponieważ w moim jednorazowym rozwiązaniu był tylko jeden projekt.Wygląda na to, że cały ten proces wymaga gdzieś w rozwiązaniu projektu ASP.NET core (lub po prostu projektu .NET Core, który nie jest biblioteką klas), prawdopodobnie również ustawionego jako projekt startowy rozwiązania.
źródło
Upewnij się, że projekt nie jest uruchomiony, z jakiegoś powodu to polecenie nie działa, gdy mój interfejs API działa w tle.
źródło
Korzystając z VS2017 Preview 3, .NET Core 2 (PREVIEW) miałem różnego rodzaju problemy, ale ostatecznie zastosowałem podejście sugerowane powyżej i stworzyłem zupełnie nowe rozwiązanie.
<TargetFramework>netcoreapp2.0</TargetFramework>
Następnie dodano Entity Framework:
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="2.0.0-preview2-final" />
Następnie;
źródło
Zbuduj kompletne rozwiązanie i zobacz, gdzie zawodzi. Niektóre projekty NuGet zostały ukryte w folderze, który nie został skompilowany. Dopiero podczas przebudowy rozwiązania dowiedziałem się, na czym polega problem. Wszystko musi zostać zbudowane, inaczej rusztowanie zawiedzie.
źródło
Jeśli korzystasz z wielu projektów w rozwiązaniu, sprawdź domyślny projekt w menedżerze pakietów.
źródło
Dla mnie problem polegał na tym, że próbowałem ustawić go w nowym pustym projekcie konsoli wewnątrz rozwiązania, które nie miało plików, więc rusztowanie próbowało użyć tego projektu jako projektu startowego i nie mogło go znaleźć
Main
. Naprawiłem to, dodając nowy plik z pustym plikiem mainźródło
Dzięki temu przebudowanie rozwiązania projektowego rozwiązało ten problem. Niektóre kluczowe zastrzeżenia dla mnie osobiście to:
dotnet build
nie wystarczyło (zakładałem, że tak)!dotnet build
Wydaje mi się, że po prostu próbowałem uruchomić polecenie w projekcie podrzędnym (myProject.data)Mam nadzieję, że pomoże to komuś, kto był równie zdezorientowany!
źródło
Rozwiązałem to, klikając prawym przyciskiem myszy projekty i „Zwolnij projekt”, pozwalając tylko projektowi EF i uruchamiać polecenia
źródło
Jeśli struktura encji zwraca
build failed
, najprawdopodobniej wystąpił jakiś błąd w którymkolwiek ze swoich projektów.Nawet jeśli projekt, na którym uruchamiasz polecenie, jest czysty i wolny od błędów, inne projekty w tym rozwiązaniu mogą spowodować
build failed
odpowiedź.Rozwiązanie
Default project
rozwijanym menuPackage Manager Console
źródło
Dla mnie mój projekt został zbudowany w programie Visual Studio, ale musiałem określić wersję dla „Microsoft.AspNetCore.App” podczas uruchamiania Scaffold-DbContext.
Więc zamiast:
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <RuntimeFrameworkVersion>2.1.6</RuntimeFrameworkVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App"/> </ItemGroup>
Musiałem mieć:
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.6" /> </ItemGroup>
źródło
Upewnij się, że Twoja kompilacja działa poprawnie.
Uruchom polecenie scaffold z konsoli pakietów, twoje polecenie powinno działać:
Scaffold-DbContext 'Data Source=TEST-XY010;Initial Catalog=TESTDB;Trusted_Connection=True' Microsoft.EntityFrameworkCore.SqlServer -Context HOPWAContext -OutputDir TESTModel -Force
źródło
Rozwiązałem ten problem, zatrzymując serwer, a następnie uruchamiając go ponownie.
źródło
To przestało dzisiaj dla mnie działać. Próbowałem więc uruchomić polecenie dotnet scaffold z wiersza polecenia i zadziałało za pierwszym razem. Nie pytaj mnie !!
źródło
Upewnij się, że masz wszystkie pakiety i naciśnij ctrl + shift + b, aby skompilować rozwiązanie. Na mnie to działa.
źródło
To zadziałało dla mnie.
źródło