Robię przykład projektu przy użyciu ASP.Net Core RC2 zi Microsoft.EntityFramework.Core
SQLite.
Śledziłem ten samouczek: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/
Ale kiedy uruchamiam to polecenie:
dotnet ef migrations add FirstMigration
Mam ten błąd:
No executable found matching command "dotnet-ef"
Oto moja project.json
konfiguracja:
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0-rc2-3002702",
"type": "platform"
},
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
"Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
"Microsoft.EntityFrameworkCore.Sqlite": "1.0.0-rc2-final"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
"version": "1.0.0-preview1-final",
"imports": "portable-net45+win8+dnxcore50"
}
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"dnxcore50",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"gcServer": true
},
"publishOptions": {
"include": [
"wwwroot",
"Views",
"appsettings.json",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
Odpowiedzi:
Entity Framework Core 1.0
Wystarczy zaktualizować
tools
sekcję pliku project.json, aby zawierała to:"Microsoft.EntityFrameworkCore.Tools": { "version": "1.0.0-preview1-final", "imports": [ "portable-net45+win8+dnxcore50", "portable-net45+win8" ] }
To powinno udostępnić
dotnet ef
polecenia.Ważny
Powinienem również zauważyć, że
dotnet ef
polecenia będą dostępne tylko wtedy, gdy zostaną uruchomione z tego samego katalogu, który zawiera plik project.json.Entity Framework Core 1,1
Jeśli ponownie wystąpi ten problem po uaktualnieniu do Entity Framework Core 1,1, pamiętaj, aby zastąpić
Microsoft.EntityFrameworkCore.Tools
zależnośćMicrosoft.EntityFrameworkCore.Tools.DotNet
wersją1.1.0-preview4
. Nie ma też potrzeby zachowywaniaimports
sekcji. Aby uzyskać więcej informacji na ten temat, zobacz nagłówek „Uaktualnianie do wersji 1.1” w poście na blogu z zapowiedzią wydania Entity Framework Core 1.1 .źródło
project.json
Mój problem to nie bycie w folderze z , dzięki!Entity Framework Core 1.1.0
Dodając do tego, jeśli używasz VS2017 z nowymi projektami .csproj bez pliku project.json
musisz edytować plik .csproj (kliknij go prawym przyciskiem myszy w eksploratorze rozwiązań i kliknij edytuj cokolwiek.csproj), a następnie wklej to w
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"> <Version>1.0.0-*</Version> </DotNetCliToolReference> </ItemGroup>
dzięki uprzejmości: https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967
źródło
VS2017
i automatycznie zaktualizowałemdotnet core CLI
do2.0
wersji, która nie jest kompatybilna zdotnet core 1.0
. Ale wydaje się, że jest to czas, który powinien zaktualizować projekt.net core 1.0
do2.0
.Specyficzne dla VS2017 15.3 lub nowszego i ASP.NET CORE 2.0 lub nowszego ...
Zainstaluj nuget dla dostawcy db za pomocą wiersza polecenia lub menedżera pakietów NuGet.
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Dodaj następującą sekcję do .csproj
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup>
Zainstaluj narzędzia czasu projektowania za pomocą wiersza polecenia lub menedżera NuGet w VS2017.
dotnet add package Microsoft.EntityFrameworkCore.Design
Umożliwia to dotnet ef * w wierszu polecenia w katalogu projektu.
Włącza polecenia dotnet ef * w wierszu poleceń w katalogu projektu,
dotnet ef migrations add Initial dotnet ef database update Initial dotnet ef dbcontext scaffold
źródło
DotNetCliToolReference
moim przypadku kluczem był plik z Tools.DotNetJest to częsty problem podczas przełączania z .NET Core 1.0 na .NET Core 1.1+ lub 2.x.
Aby to naprawić, musisz:
project.json
(dla programu .NET Core 1.0) lub<projectName>.csproj
(dla programu .NET Core 1.1+ i 2.x).Dokładniej, w przypadku projektów .NET Core 1.0 dodaj to:
"tools": { "Microsoft.EntityFrameworkCore.Tools": "1.0.0" "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0" }
W przypadku projektów .NET Core 1.1+ i .NET Core 2.x dodaj to:
<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup>
Jeśli masz już
tools
klucz json lub<ItemGroup>
element z co najmniej jednym istniejącymDotNetCliToolReference
elementem, po prostu dodaj nowe do istniejącej grupy.WAŻNE : poza wykonaniem powyższych kroków, musisz uruchomić
dotnet ef
polecenie w folderze głównym projektu (tym zawierającym plik projektu), w przeciwnym razie nie zadziała.Więcej informacji i obszerne wyjaśnienie problemu można przeczytać na moim blogu .
źródło
C:\Program Files\dotnet
w zmiennej środowiskowej PATH LUB używając pełnej ścieżki, tj.C:\Program Files\dotnet\dotnet.exe
Myślę, że znalazłem dokładne rozwiązanie problemu - dotnet: nie znaleziono pliku wykonywalnego zgodnego z poleceniem „dotnet-ef” ..
Używam dot net core 2.0 w VS 2017 w wersji 15.5.3
Ten błąd jest spowodowany ponieważ Nuget to nie mógł znaleźć się plik rozwiązania na miejscu.
Przeniosłem się do katalogu głównego , dodając poniższe polecenie w konsoli Menedżera pakietów .
cd. \ Szkoła1
Tutaj „School1” był moim głównym katalogiem projektu i zawiera moją klasę „Startup.cs”, w twoim przypadku będzie inaczej.
dotnet ef
w konsoli Menedżera pakietów, która będzie teraz działać pomyślnie.Wystąpił błąd Błąd podczas uruchamiania
dotnet ef
.Poprawiłem błąd, przechodząc do folderu głównego za pomocą polecenia
cd .\School1
Mam nadzieję, że pomoże to moim innym programistom Dot Net.
źródło
Musiałem dodać Microsoft.EntityFrameworkCore.Tools. DotNet do pracy. Sekcja narzędzi w pliku project.json będzie wyglądać następująco:
"tools": { "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final", "Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final", "Microsoft.EntityFrameworkCore.Tools":"1.1.0-preview4-final", "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final" },
źródło
Jeśli napotkasz ten problem i uruchomisz rdzeń asp.net za pomocą narzędzia CLI, możesz go rozwiązać, dodając
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
do pliku xx.csproj idotnet restore
. Następnie możesz użyć polecenia dotnet ef.źródło
Zamiast otwierać osobne okno konsoli w programie VS Package Manager Console wpisz i uruchom następujące polecenia:
HTH
EDYCJA : Możesz również potrzebować następującej klasy w swoim głównym projekcie MVC:
public class DbContextFactory : IDesignTimeDbContextFactory<NotesContext> { public YourDbContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder<YourDbContext>(); builder.UseSqlServer("DefaultConnection", optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(YourDbContext).GetTypeInfo().Assembly.GetName().Name)); return new YourDbContext(builder.Options); } }
źródło
W moim przypadku
dotnet ef
nie było dostępne i nie wyświetlało się na liście kiedydotnet -h
jest uruchomiony.Zainstalowałem globalnie dotnet-ef za pomocą następującego polecenia i teraz mogę go używać. Ale nadal nie ma na liście.
dotnet tool install -g dotnet-ef
źródło
Używałem osobnego projektu biblioteki klas. Po wypróbowaniu i niepowodzeniu wszystkich powyższych czynności w konsoli menedżera pakietów. Użyłem wiersza poleceń i zadziałało! Dziwne. Jednak zasługa tego artykułu . A jeśli używasz oddzielnego projektu biblioteki klas, to jest twoje rozwiązanie.
źródło
W programie Visual Studio 2017 musiałem uruchomić te polecenia z konsoli menedżera pakietów
install-package Microsoft.EntityFrameworkCore.SqlServer.Design Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"
źródło
W sekcji narzędzi dodaj poniższy kod,
"tools": { "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final", "Microsoft.AspNetCore.Server.IISIntegration.Tools": { "version": "1.0.0-preview2-final", "imports": "portable-net45+win8+dnxcore50" } }
Ten format kodu rozwiązał mój błąd.
źródło
Domyślnie podczas dodawania pakietu NuGet zostanie dodany jako PackageReference, jest to nieprawidłowe, więc edytuj go ręcznie
1- Edytuj plik .csproj
2- zmiana z „PackageReference”:
<ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/> </ItemGroup> to: <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/> </ItemGroup>
źródło