Nuget PM 中无法识别 Entity Framework Core 命令

Posted

技术标签:

【中文标题】Nuget PM 中无法识别 Entity Framework Core 命令【英文标题】:Entity Framework Core commands are not recognized in Nuget PM 【发布时间】:2017-08-18 08:23:44 【问题描述】:

我们在项目中同时使用 EF6 和 EF Core。我有其他团队成员创建的迁移。我想使用下一个命令更新数据库:

EntityFrameworkCore\更新数据库

但是发生了下一个错误:

EntityFrameworkCore\Update-Database : The module 'EntityFrameworkCore' could not be loaded. For more information, run 'Import-Module EntityFrameworkCore'.
At line:1 char:1
+ EntityFrameworkCore\Update-Database
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (EntityFrameworkCore\Update-Database:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CouldNotAutoLoadModule

它写道,无法加载 EF Core 模块,但它在项目包文件夹中,我检查了它。

Import-Module EntityFrameworkCore 命令执行结果:

Import-Module : The specified module 'EntityFrameworkCore' was not loaded because no valid module file was found in any module directory.
At line:1 char:1
+ Import-Module EntityFrameworkCore
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (EntityFrameworkCore:String) [Import-Module], FileNotFoundException
    + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

我现在不使用t understand why i cant,为什么 NPM 不能精细 EF Core 模块。

在csproj文件中提到了这个包:

<ItemGroup>
    <PackageReference Include="AutoMapper" Version="6.1.1" />
    <PackageReference Include="EntityFramework" Version="6.1.3" />
    <PackageReference Include="IdentityServer4" Version="1.5.2" />
    <PackageReference Include="IdentityServer4.AccessTokenValidation" Version="1.2.1" />
    <PackageReference Include="IdentityServer4.AspNetIdentity" Version="1.0.1" />
    <PackageReference Include="IdentityServer4.EntityFramework" Version="1.0.1" />
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Identity" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.1" />
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.2" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.2" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.2" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="1.1.1" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
    <PackageReference Include="System.Linq.Dynamic" Version="1.0.7" />
  </ItemGroup>

谁能告诉我,我做错了什么?可以识别没有 EntityFrameworkCore 前缀的更新数据库。 .Net 框架 4.6.2

【问题讨论】:

我可能误读了这一点,但我认为您不能在 .Net Framework 上下文中使用实体框架核心。您的应用程序需要使用 netcoreapp2.0 的目标框架。 @Jack 我的团队成员也有相同的项目配置,并且可以正常工作。看看我们现在使用的 EF Core 版本。 【参考方案1】:

我遇到了同样的问题,我不得不改变工作方式。我把这个食谱写给了我的伙伴们,希望对你有帮助:

"

1st.- 如何添加迁移:

Go to the project folder and type:
dotnet ef migrations add [NameOFYourMigrationGoesHere] -c YourContext

注意:不要忘记将创建的文件添加到源代码管理中,这不是自动完成的

2nd.- 如何更新您的数据库: 2.a.- 在 docker -> 您可以运行项目(完全使用 Docker),迁移将在第一次使用 Context 时应用。 注意:(它将使用为该环境配置的连接字符串)

2.b.- 您的本地数据库 -> 编辑在 ConfigurationContext.OnConfigure 中硬编码的连接字符串并运行:

dotnet ef 数据库更新 --context ConfigurationContext

从头开始复制的步骤:

迁移命令在 .Net Core 中发生了很大变化 我推荐参观: https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

1st.- 您必须将这些行添加到 .csproj:

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" />
</ItemGroup>

注意:版本可能会改变

2nd.- 在您的项目中创建一个上下文,如下所示:

公共类 YourContext : DbContext #region 构造函数

public YourContext()



public YourContext(DbContextOptions options) : base(options)




#endregion Constructors

#region DbSets
#endregion DbSets

#region OnConfiguring
protected override void OnConfiguring(DbContextOptionsBuilder options)

    // In order to be able to create migrations and update database:
    if (!options.IsConfigured)
    
        options.UseSqlServer("YourLocalConnectionStringShouldBeHere");
    
    base.OnConfiguring(options);

#endregion

#region Model Creating

protected override void OnModelCreating(ModelBuilder modelBuilder)

   // Your Model Crerating Stuff


#endregion Model Creating

3rd.- 为什么不按照上述步骤创建“初始”迁移??

编码愉快!

"

希望对你有帮助。

胡安

编辑:

此外,这里真正的问题是存在不同的 EF“风味”。只需转到 EF 根文档并查看差异:

https://docs.microsoft.com/en-us/ef/

EF 6 迁移命令:https://dzone.com/articles/ef-migrations-command

EF Core 迁移命令:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations

现在我的回答对我来说似乎很完整。我希望这可以节省你们的时间。

【讨论】:

谢谢你,胡安!我已经从项目文件夹更新数据库,只是在 windows power shell 中写入下一个命令:dotnet ef database update 我仍然不知道为什么我以前的命令不起作用,但你的建议对我非常有用! 嗯,很高兴帮助 Aram... 其他人说这是因为目标框架不同,工具、命令和工作方式与使用 EF for .NET 框架时略有不同。您使用 EF Core,您使用的命令是 Core,正如我所说,我第一次在 .NET Core 解决方案中使用迁移时遇到了类似的问题(我的同事也是如此)正如我所说,很高兴能提供帮助。韩国,。胡安

以上是关于Nuget PM 中无法识别 Entity Framework Core 命令的主要内容,如果未能解决你的问题,请参考以下文章

NuGet和/或PM突然无法正常工作

为啥 Visual Studio 2015 控制台运行程序无法识别 MSpec?

Nuget PM Visual Studio Express v2013 中的错误

nuget 无法识别已安装的软件包

Visual Studio 无法识别已安装 NuGet 包的头文件

entity framework 5 有没有方法不通过NUGET在VS 2010中安装