Je fais un exemple de projet en utilisant ASP.Net Core RC2 avec Microsoft.EntityFramework.Core
et SQLite.
J'ai suivi ce tutoriel: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/
Mais quand je lance cette commande:
dotnet ef migrations add FirstMigration
J'ai eu cette erreur:
No executable found matching command "dotnet-ef"
Voici ma configuration project.json
:
{
"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%" ]
}
}
Entity Framework Core 1.0
Vous devriez juste avoir besoin de mettre à jour la section tools
de votre fichier project.json pour inclure ceci:
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview1-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
Cela devrait rendre les commandes dotnet ef
disponibles.
Important
Je dois également noter ici que les commandes dotnet ef
ne seront disponibles que si elles sont exécutées à partir du même répertoire que le fichier project.json.
Entity Framework Core 1.1
Si vous rencontrez de nouveau ce problème après la mise à niveau vers Entity Framework Core 1.1, veillez à remplacer la dépendance Microsoft.EntityFrameworkCore.Tools
par Microsoft.EntityFrameworkCore.Tools.DotNet
version 1.1.0-preview4
. Il n'est pas nécessaire de conserver la section imports
. Pour plus d'informations à ce sujet, voir la rubrique "Mise à niveau vers la version 1.1" sous la rubrique publication du blog d'annonce de la version d'Entity Framework Core 1.1 .
Entity Framework Core 1.1
Ajout si vous utilisez VS2017 avec les nouveaux projets .csproj sans fichier project.json
vous devez éditer le fichier .csproj (cliquez dessus avec le bouton droit de la souris dans l'explorateur de solutions, puis cliquez sur éditer what.csproj), puis collez-le dans
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet">
<Version>1.0.0-*</Version>
</DotNetCliToolReference>
</ItemGroup>
courtoisie de: https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967
Spécifique à VS2017 15.3 ou version ultérieure et ASP.NET CORE 2.0 ou version ultérieure ...
Installez nuget for db provider via la ligne de commande ou le gestionnaire de packages de nuget.
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Ajouter la section suivante à .csproj
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
Installez les outils de conception via le gestionnaire de ligne de commande ou de nuget dans VS2017.
dotnet add package Microsoft.EntityFrameworkCore.Design
Cela active dotnet ef * sur la ligne de commande dans le répertoire du projet.
Active les commandes dotnet ef * sur la ligne de commande dans le répertoire du projet,
dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold
Il s'agit d'un problème courant lors du passage de .NET Core 1.0 à .NET Core 1.1+ ou 2.x.
Pour résoudre ce problème, vous devez:
project.json
(pour .NET Core 1.0) ou <projectName>.csproj
(pour .NET Core 1.1+ & 2.x).Plus spécifiquement, pour les projets .NET Core 1.0, ajoutez ceci:
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0"
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0"
}
Pour les projets .NET Core 1.1+ et .NET Core 2.x, ajoutez ceci:
<ItemGroup>
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools"
Version="2.0.0" />
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
Si vous avez déjà une clé tools
json ou un élément <ItemGroup>
avec un ou plusieurs éléments DotNetCliToolReference
existants, ajoutez simplement les nouveaux au groupe existant.
IMPORTANT: outre les opérations ci-dessus, vous devez lancer la commande dotnet ef
dans le dossier racine du projet (celui contenant le fichier de projet), sinon cela ne fonctionnera pas.
Pour plus d'informations et une explication détaillée du problème, vous pouvez en lire plus sur mon blog .
Je pense avoir trouvé la solution exacte du problème - dotnet: Aucun exécutable trouvé ne correspond à la commande "dotnet-ef " ..
J'utilise dot net core 2.0 dans VS 2017 version 15.5.3
Cause de cette erreur
Cette erreur est due au fait que le Nuget n’est pas incapable de trouver le fichier de solution sur l'emplacement.
Solution: - Accédez au répertoire dans lequel vous avez la classe 'Startup.cs'
Je me suis déplacé à la racine en ajoutant la commande ci-dessous sur votre Console du gestionnaire de packages .
cd.\école1
Ici 'School1' était mon répertoire racine du projet, et il contient ma classe 'Startup.cs', elle sera différente dans votre cas.
dotnet ef
sur Console Package Manager , qui s'exécutera correctement.Exemple avec images pour une meilleure compréhension
J'ai corrigé l'erreur en passant au dossier racine avec la commande cd .\School1
J'espère que cela aidera mes collègues développeurs Dot Net.
Je devais ajouter Microsoft.EntityFrameworkCore.Tools .DotNet pour fonctionner. La section outils de votre fichier project.json ressemblera à ceci:
"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"
},
Si vous rencontrez ce problème et exécutez l'outil de base asp.net avec CLI, vous pouvez le résoudre en ajoutant <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
dans le fichier xx.csproj et dotnet restore
. Ensuite, vous pouvez utiliser la commande dotnet ef.
Au lieu d'ouvrir une fenêtre de console séparée dans le type de console VS Package Manager, exécutez les commandes suivantes:
Ajouter une migration
Add-Migration <migration name>
Supprimer la dernière migration
Remove-Migration
Avant qu'une migration ait été appliquée (ou, pour appliquer une migration):
Update-Database
Lorsque la migration a été appliquée:
Update-Database -Migration <previous migration> -Context <db context name>
HTH
EDIT: Vous aurez peut-être également besoin de la classe suivante dans votre projet principal 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);
}
}
Par défaut, lors de l'ajout d'un NuGet Pkg, il sera ajouté en tant que référence de paquet. C'est faux, modifiez-le manuellement.
1- Éditer le fichier .csproj
2- changement de "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>
J'utilisais un projet de bibliothèque de classe séparé. Après avoir essayé et échoué tout ce qui précède dans la console du gestionnaire de paquets. J'ai utilisé la commande Invite, et cela a fonctionné! Bizarre. Cependant, le crédit va à cet article . Et si vous utilisez un projet de bibliothèque de classes séparé, This est votre solution.
Sous Visual Studio 2017, je devais exécuter ces commandes à partir de la console du gestionnaire de packages.
install-package Microsoft.EntityFrameworkCore.SqlServer.Design
Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"
Dans la section outils, ajoutez ci-dessous le code,
"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"
}
}
Ce format de code a résolu mon erreur.