实体框架:在“数据库更新”上出现错误“无法将参数绑定到参数'Path'

时间:2019-10-10 08:13:40

标签: c# asp.net entity-framework-6

尝试更新数据库时出现此错误

  

Update-Database:无法将参数绑定到参数“ Path”,因为

     

为空。在第1行:char:2

     
      
  • 更新数据库
  •   
  • 
    
  •   
  • CategoryInfo:InvalidData :( :) [Update-Database],ParameterBindingValidationException
  •   
  • FullyQualifiedErrorId:ParameterArgumentValidationErrorNullNotAllowed,更新数据库
  •   

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

1 个答案:

答案 0 :(得分:1)

已在GitHub上报告了此错误(请参阅问题129013061348)。它是固定的(由1290期的记者提供),可在每晚的版本中使用。它最初计划在6.4.0 release(计划在this comment的11月下旬/ 12月初)使用,但此后已移至6.3.1 release。撰写本文时,两个里程碑都没有截止日期。

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

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

如果降级,请确保对解决方案中使用它的所有项目都进行降级。如果 any 项目引用了6.3.0程序包,则6.3.0 PowerShell模块将优先。您可以使用解决方案节点中的“管理解决方案的NuGet软件包...”命令来帮助确定在任何项目中仍可能安装6.3.0的位置。完成后,您需要关闭并重新打开项目才能加载6.2.0的PowerShell模块。


解决方法

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

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

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

请注意:如果您的连接字符串包含|DataDirectory|,则此操作将无效,因为它避免指定--data-dir参数以避免该错误。

  1. 使用nightly build

尽管这可行,但是对于许多项目而言,它可能是一个不起眼的事情,因为在生产中通常不允许使用预发布版本。但是,如果您的生产版本还需要几个月的时间,那么如果您愿意继续工作并希望及时发布可用的版本,则可以选择。

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

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

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

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

如果您在项目文件中使用PackageReference标签,则程序集将在共享缓存位置(通常在%USERPROFILE%\.nuget\packages下)被引用。您可以在其中修改文件,如问题1290所示,该文件将通过PackageReference标记供所有使用该软件包的项目使用。如果您使用的是packages.config,则必须在packages文件夹中进行修改,即more likely to be lost


我已经对所有这些变通方法进行了测试,并取得了成功。