实体框架代码第一次迁移错误

时间:2013-01-19 04:06:26

标签: .net entity-framework exception-handling ef-code-first

我是MVC 4和实体框架的新手,当我从包管理器控制台运行此命令时:

Enable-Migrations -ContextTypeName MyFirstMvcApp.Models.InventoryDbContext

Join-Path:无法将参数绑定到参数'Path',因为它为null。

我收到以下错误:

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

我该如何解决这个问题? 请注意,我正在使用带有SP1的Visual Studio 2010 Ultimate,并且已在此link中安装了MVC4。

13 个答案:

答案 0 :(得分:29)

通过卸载并重新安装实体框架来解决此问题。 为了他人的利益,这里有命令......

卸载:

  

PM&GT; Uninstall-Package EntityFramework -Force

卸载后,重新安装EntityFramework:

  

PM&GT; Install-Package EntityFramework -Pre

有!这是固定的。虽然我仍然不知道是什么原因引起了这个问题。

答案 1 :(得分:22)

Visual Studio 2019: 卸载软件包EntityFramework -Force

然后

Install-Package EntityFramework -Pre -Ver 6.2.0

v6.3.0出现了一些问题

答案 2 :(得分:13)

我面临着同样的问题,这就是我解决问题的方式,

我正在使用Visual Studio 2019,因此我安装了最新的Entity Framework 6.3.0(stable),当我运行Enable-Migrations命令时遇到了问题,我尝试重新安装Entity Framework,但没有这样做。无法正常工作,因此我从Nuget软件包管理器中安装了旧版本6.2.0显然可以正常工作。

答案 3 :(得分:9)

在这里尝试了所有东西。我个人讨厌一开始就不知道问题出在哪里而解决问题。在启动项目是Web应用程序的情况下,在论坛上进行深入研究,这似乎是版本6.3.0中引起的已知错误。他们已经在日常构建中对其进行了修复。因此,要解决该问题,您需要安装它。

首先,卸载软件包:

PM> Uninstall-Package EntityFramework -Force

然后安装最新的每日版本(在我的情况下为以下版本)

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

答案 4 :(得分:4)

我从“ 6.2.0”升级到EntityFramework“ 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项目可以解决我的问题。请注意,如果使用连接字符串,则必须将其复制到相关项目的配置文件中。

答案 5 :(得分:3)

当我将EntityFramework更新到6.3.0版本时,我遇到了同样的问题,所以当我回到6.2.0时,它解决了这个问题,所以我建议您做同样的事情

答案 6 :(得分:1)

卸载实体框架并不适合我。

事实证明,问题并非Visual StudioEntity Framemwork,但事实是我正在运行PowerShell 2(在Windows 7上)。

Entity FrameworkVisual Studio需要PowerShell 3

更新并重新启动后,问题就消失了。 希望这会帮助一些人。

你可以在这里找到PowerShell - &gt; https://www.microsoft.com/en-us/download/details.aspx?id=40855

答案 7 :(得分:1)

几年后...
造成此问题的另一个可能原因是VS 2017 csproj格式-或更准确地说,与使用packages.config相比,PackageReference方法。

使用在项目文件中使用PackageReference格式包括Nuget软件包的新方法,不会执行EntityFramework的安装脚本(这是包括nuget软件包的新方法的已知事实)。因此,PowerShell命令尚未准备好执行。

Entity Framework GitHub repository上正在进行有关该问题的讨论。
在解决此问题之前(无论是由NuGet员工还是由EF人员)以便运行迁移(谈论EF 6-而不是EF Core!),您需要坚持使用包来包含Nuget包的“旧”方式。配置方法。

在以下位置检查您的Visual Studio设置
Tools -> Options -> NuGet Package Manager -> General,并确保
Default package management format设置为Packages.config

请注意,在切换此设置时,您将必须卸载所有软件包,保存项目,重新启动Visual Studio,然后重新安装所有软件包。 在当前的VS 2017版本(我认为从v 15.4开始)中,有一种自动从Packages.config转换为PackageReference的方法,但反之亦然(不幸的是)。

答案 8 :(得分:1)

在使用Code First迁移时,我遇到了同样的问题。

对我有用的是转到NuGet数据包管理器,然后搜索Entity Framework。 我在那里安装了Pre-release version,然后选择了Latest Stable version并安装了它。

此后,一切正常。

答案 9 :(得分:1)

从6.3版开始,实体框架工具支持新的SDK样式的项目格式。

但是,当包含您的迁移的项目使用新的SDK样式格式,而启动项目使用经典的csproj格式时,此问题仍然可能发生。

要解决此问题,请使两个项目使用相同的csproj格式。

答案 10 :(得分:0)

我遇到了同样的问题,并通过更改Startup Project来解决了这个问题。

我在同一解决方案中有5个项目,每次我Right ClickSet as startup到一个非ASPNET CORE项目时,都会出现这种错误。

答案 11 :(得分:0)

与上述建议共享,这是我的补充。

PM>卸载包EntityFramework -Force 然后;

PM>安装包EntityFramework -Pre

以上两个动作还不够。我需要做下一个:

然后在解决方案资源管理器中,在根目录级别的项目中创建一个包含以下代码的类-以我为例。然后自动创建其中包含Configurations.cs文件的Migrations文件夹。

public class MyDbContext : DbContext
{
pubic MyDbContext()
{
}

}

答案 12 :(得分:0)

我想添加在遇到此问题时发现的其他内容。

事实证明,就我而言(运行Visual Studio 2017,实体框架6.2),问题是项目位于远程目录(\ server \ user \ location)而不是本地目录中。

将项目复制到本地位置后,命令运行没有问题。