【问题标题】:Entity Framework Code First Migration Error实体框架代码优先迁移错误
【发布时间】:2013-01-02 21:00:42
【问题描述】:

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

Enable-Migrations -ContextTypeName MyFirstMvcApp.Models.InventoryDbContext

Join-Path : 无法将参数绑定到参数“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

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

【问题讨论】:

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


    【解决方案1】:

    通过卸载并重新安装实体框架来修复它。 为了他人的利益,这里是命令...

    卸载:

    PM> 卸载包EntityFramework -Force

    卸载后重新安装EntityFramework:

    PM> Install-Package EntityFramework -Pre

    那里!它是固定的。虽然我仍然不知道是什么导致了问题。

    【讨论】:

    • PM&gt; Install-Package EntityFramework -Pre -Version 5.0.0 特定版本
    • 一些评论:你必须在“作为管理员”模式下运行你的VS
    【解决方案2】:

    卸载实体框架对我不起作用。

    原来不是Visual StudioEntity Framemwork 引起了问题,而是我在运行PowerShell 2(在Windows 7 上)。

    Entity FrameworkVisual Studio 需要 PowerShell 3

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

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

    【讨论】:

      【解决方案3】:

      在我的情况下,上述解决方案都不起作用,所以我快速查看了 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" />
      

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

      【讨论】:

        【解决方案4】:

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

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

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


        Tools -&gt; Options -&gt; NuGet Package Manager -&gt; General 检查您的 Visual Studio 设置,并确保将
        Default package management format 设置为 Packages.config

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

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

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

            之后一切都很顺利。

            【讨论】:

              【解决方案7】:

              我遇到了同样的问题,这就是我解决问题的方法,

              我使用的是 Visual Studio 2019,因此我安装了最新的实体框架 6.3.0(stable) 我在运行 Enable-Migrations 命令时遇到了问题,我尝试重新安装实体框架,但它没有t 工作,所以我从 Nuget 包管理器安装了旧版本 6.2.0,显然它工作正常。

              【讨论】:

                【解决方案8】:

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

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

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

                【讨论】:

                • 您能详细说明一下这个答案吗?我有使用 pre Core csproj 格式的 Windows 窗体项目,但我不确定这与问题有什么相关性。我在 EF Github 页面上找不到升级说明的参考,所以我不知道该怎么想。
                • @andrensairr 抱歉,我最后只是回滚到 6.2。尽管在使两个项目都遵循相同的格式时,我确实观察到了更好的行为,但不知何故后来问题又回来了。我没有费心去调查,我没有时间。
                【解决方案9】:

                视觉工作室 2019: 卸载包EntityFramework -Force

                然后

                Install-Package EntityFramework -Pre -Version 6.2.0

                v6.3.0 出了点问题

                【讨论】:

                • 从 v6.3.0 开始,恢复到 v6.2.0 也是我解决此错误的唯一方法。它发生在 vs2017 和 vs2019 中,它必须与上面的@antoine 答案有关。
                【解决方案10】:

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

                【讨论】:

                  【解决方案11】:

                  我在从“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 项目解决了我的问题。请注意,如果您正在使用连接字符串,则必须将它们复制到相关项目的配置文件中。

                  【讨论】:

                    【解决方案12】:

                    在这里尝试了所有的东西。我个人讨厌在不知道问题所在的情况下解决问题。在论坛中挖掘,这似乎是 6.3.0 版本中的一个已知错误,当​​时启动项目是一个网络应用程序。他们已经在日常构建中修复了它。所以要解决它,你需要安装它。

                    首先,卸载软件包:

                    PM> Uninstall-Package EntityFramework -Force
                    

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

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

                    【讨论】:

                    • 回滚到 6.2.0 也可以,但这个答案应该更高。感谢您的调查。
                    • 你是完全正确的@SedatKapanoglu,因为在这些特定条件下问题发生在 6.3.0,降级或升级应该可以解决问题。我想我的解决方案很快也会随着 6.4.0 的最终版本而过时
                    • @SedatKapanoglu Mr sedet,降级到最终版本比升级到预览版更好吗?
                    【解决方案13】:

                    与以上建议分享,这是我的补充。

                    PM> 卸载-Package EntityFramework -Force 然后;

                    PM> Install-Package EntityFramework -Pre

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

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

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

                    }

                    【讨论】:

                      【解决方案14】:

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

                      事实证明,在我的情况下(运行 Visual Studio 2017,Entity Framework 6.2),问题在于项目位于远程目录(\server\user\location)而不是本地目录中。

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

                      【讨论】:

                        猜你喜欢
                        • 2013-12-29
                        • 2013-08-02
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-10-31
                        • 1970-01-01
                        相关资源
                        最近更新 更多