实体框架Code First迁移错误

26

我是MVC 4和Entity Framework的新手,当我在包管理器控制台中运行此命令时:

Enable-Migrations -ContextTypeName MyFirstMvcApp.Models.InventoryDbContext

连接路径:无法绑定参数“Path”,因为它为空。

我遇到了以下错误:

Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:363 char:27
+     $toolsPath = Join-Path <<<<  $installPath tools
    + CategoryInfo          : InvalidData: (:) [Join-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand

Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:392 char:73
+     $utilityAssembly = [System.Reflection.Assembly]::LoadFrom((Join-Path <<<<  $toolsPath EntityFramework.PowerShell.Utility.dll))
    + CategoryInfo          : InvalidData: (:) [Join-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand

You cannot call a method on a null-valued expression.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:393 char:50
+     $dispatcher = $utilityAssembly.CreateInstance <<<< (
    + CategoryInfo          : InvalidOperation: (CreateInstance:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:426 char:19
+         (Join-Path <<<<  $runner.ToolsPath EntityFramework.PowerShell.dll),
    + CategoryInfo          : InvalidData: (:) [Join-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand

我该如何修复这个问题? 请注意,我正在使用已安装MVC4的Visual Studio 2010 Ultimate SP1版本,链接为此处

14个回答

42

通过卸载并重新安装实体框架解决了问题。 为了让其他人受益,以下是命令...

卸载:

PM> Uninstall-Package EntityFramework -Force

卸载后,重新安装EntityFramework:

PM> Install-Package EntityFramework -Pre

这样就修复了。虽然我仍然不知道问题的原因。


3
针对特定版本,执行以下命令:PM> Install-Package EntityFramework -Pre -Version 5.0.0 - nicemd
1
一些注释:您必须以“管理员”模式运行您的VS - Yaugen Vlasau

22

Visual Studio 2019:

卸载包 EntityFramework -Force

然后

安装包 EntityFramework -Pre -Version 6.2.0

版本6.3.0似乎有问题。


3
截至版本v6.3.0,回滚到v6.2.0也是我避免这个错误的唯一方法。这个错误在vs2017和vs2019中都会发生,可能与上面@antoine的答案有关。 - chongo2002

13
我曾经遇到过同样的问题,这是我解决问题的方法:
由于我使用的是Visual Studio 2019,因此我安装了最新版本的Entity Framework 6.3.0(稳定版)。当我运行Enable-Migrations命令时,出现了问题。我尝试重新安装Entity Framework,但它没有起作用。所以我从Nuget软件包管理器中安装了旧版本6.2.0,结果问题得到解决。

13

尝试了这里所有的方法。个人不喜欢在不知道问题所在的情况下解决问题。在论坛中查找,这似乎是一个已知的bug,是在版本6.3.0中启动项目为Web应用程序时引起的。他们已经在其每日构建中修复了此问题。因此,要解决此问题,您需要安装那个版本。

首先,卸载该软件包:

PM> Uninstall-Package EntityFramework -Force

然后安装最新的日常构建版本(在我的情况下是以下版本)

PM> Install-Package EntityFramework -Version 6.4.0-preview1-19506-01

2
回滚到6.2.0也可以解决问题,但是这个答案应该排在更前面。感谢您的调查。 - Sedat Kapanoglu
1
你是完全正确的 @SedatKapanoglu,因为问题发生在6.3.0的特定条件下,降级或升级应该可以解决这个问题。我想随着6.4.0的最终发布,我的解决方案也很快会过时。 - Nemesis
@SedatKapanoglu Sedat先生,降级到最终版本比升级到预览版更好吗? - Serhat Koroglu

5
我在将EntityFramework从"6.2.0"升级到"6.3.0"时遇到了问题。您可以在这里找到问题和解决方法 EF 6.3.0 PMC commands throw ParameterBindingValidationException when Startup Project is a Web App.
当您有多个项目并将ASP.NET项目设置为启动项目时,就会出现问题。
链接建议的解决方法:
如果您向解决方案中添加了一个新的虚拟控制台应用程序并将EntityFramework的日常构建版本安装到其中,那么将使用包括修复程序的版本的命令。这些命令将与引用EF 6.3的项目一起正常工作。
个人解决方案:
将启动项目设置为非ASP.NET项目可解决我的问题。请注意,如果您正在使用连接字符串,则必须将其复制到相关项目的配置文件中。

4

我曾经遇到过同样的问题,通过更改启动项目来解决它。

在同一个解决方案中有5个项目,每次我右键单击并将非 ASPNET CORE 项目设置为启动项时,就会出现这种错误。


4
几年后... 这个问题的另一个可能原因是VS 2017 csproj格式 - 或者更确切地说,与使用packages.config相比的PackageReference方法。 使用PackageReference格式在项目文件中包含Nuget Packages的新方法,不会执行EntityFramework的安装脚本(对于包含nuget packages的这种新方法已经是一个已知事实)。由于这个事实,PowerShell命令还没有准备好执行。 关于这个问题正在Entity Framework GitHub repository上进行讨论。在这个问题得到解决之前(无论是NuGet人员还是EF人员),为了运行迁移(谈论的是EF 6 - 不是EF Core!),你需要坚持使用“旧”的方法来包含Nuget packages,使用packages.config方法。 检查你的Visual Studio设置,路径为 Tools -> Options -> NuGet Package Manager -> General,并确保 Default package management format被设置为Packages.config。
请注意,当您切换此设置时,您将不得不卸载所有包,保存项目,重新启动Visual Studio,然后重新安装所有包。
在当前的VS 2017版本中(我认为从v15.4开始),会自动将Packages.config转换为PackageReference,但反之则不行(不幸的是)。

3

当我将EntityFramework更新到6.3.0版本后,我也遇到了同样的问题。之后我回退到6.2.0版本,问题得以解决。所以我建议你也这样做。


2
卸载实体框架对我没有用。
原来问题不是由 Visual Studio 或 Entity Framework 引起的,而是因为我正在运行 PowerShell 2(在 Windows 7 上)。
Entity Framework 和 Visual Studio 需要 PowerShell 3。
更新并重新启动后,问题就解决了。希望这能帮助一些人。
你可以在这里找到 PowerShell -> https://www.microsoft.com/en-us/download/details.aspx?id=40855

1
在我的情况下,以上解决方案都没有起作用,因此我快速查看了packages.config文件,并惊讶地发现了两个Entity Framework条目。
<package id="EntityFramework" version="6.1.1" targetFramework="net45" />
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />

请注意它们是不同的版本,不确定实际上如何发生这种情况。无论如何,一旦我从packages.config文件中删除了旧版本,即最终只保留了这个版本:
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />

我随后可以毫无问题地启用迁移。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接