Entity Framework:"database-update" 上的错误 "Cannot bind argument to parameter 'Path' "

Entity Framework: Error "Cannot bind argument to parameter 'Path' " on "database-update"

我在尝试更新数据库时遇到此错误

Update-Database : Cannot bind argument to parameter 'Path' because it

is null. At line:1 char:2

  • Update-Database
  • 
    
  • CategoryInfo : InvalidData: (:) [Update-Database], ParameterBindingValidationException
  • FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Update-Database

你能指出我解决问题的正确方向吗? 谢谢

此错误已在 GitHub 上报告(请参阅问题 1290, 1306, 1348). It was fixed (by the reporter of issue 1290) and is available in nightly builds. It was first scheduled for the 6.4.0 release (scheduled for late November/early December per this comment) but has since been moved to a 6.3.1 release。截至撰写本文时,这两个里程碑都没有截止日期。

该错误仅影响 EF 迁移,并且仅适用于使用 Web 应用程序项目作为启动项目(即使您的实体和上下文位于不同的项目中)。如果影响多个命令(Enable-MigrationsAdd-MigrationUpdate-DatabaseGet-Migrations),因为它们调用包含错误的代码。

如果您需要使用迁移,请降级到版本 6.2.0使用已确定的解决方法之一

如果降级,请确保对解决方案中使用它的所有项目执行降级。如果 6.3.0 包被 any 项目引用,则 6.3.0 PowerShell 模块将优先。您可以使用解决方案节点中的 "Manage NuGet Packages for Solution..." 命令来帮助确定 6.3.0 可能仍安装在任何项目中的位置。完成后,您需要关闭并重新打开项目以加载 6.2.0 的 PowerShell 模块。


解决方法

如果您 want/need 使用 6.3 版并且遇到此错误,您可以尝试几种解决方法。以下是我能够汇总的内容:

  1. 使用控制台应用程序作为启动项目。

由于该bug只影响Web应用项目,导致错误的条件分支永远不会执行。如果您已经有一个带有正确连接字符串的控制台应用程序,您可以使用它。如果不这样做,您可以为此添加一个虚拟项目。

注意:如果您的连接字符串包含 |DataDirectory|,这将不起作用,因为它避免指定 --data-dir 参数以避免错误。

  1. 使用 nightly build.

虽然这可行,但对于很多项目来说它可能是一个非启动器,因为在生产中通常不允许预发布版本。但是,如果您的生产版本还有几个月的时间,如果您愿意继续并希望工作版本能够及时可用,那么这可能是一个选择。

  1. 添加一个引用每晚构建的虚拟项目。

与使用夜间构建类似,您在未使用的项目中引用它以加载固定的 PowerShell 模块。您仍然会在应用程序使用的项目中引用已发布的版本。

  1. 修改共享缓存位置的本地包。

警告:对于团队(或 CI/CD 环境)来说,这不是一个可行的解决方案,但对于想要在等待下一个版本时使用快速 hack 的个人来说可能没问题如果共享缓存被清除,不介意重新应用它。

如果您在项目文件中使用 PackageReference 标记,程序集将在共享缓存位置引用,通常在 %USERPROFILE%\.nuget\packages 下。您可以在那里修改文件,如问题 1290 and it will be used by all projects that use the package via PackageReference tags. If you're using packages.config you have to modify it in the packages folder and that's more likely to be lost.

中所示

我已经测试了所有这些解决方法并取得了成功。