为啥 ef Add-Migration 出现错误

Posted

技术标签:

【中文标题】为啥 ef Add-Migration 出现错误【英文标题】:Why is there an Error in ef Add-Migration为什么 ef Add-Migration 出现错误 【发布时间】:2015-07-20 07:29:17 【问题描述】:

我有几个类文件。现在我正在添加一个新模型类并尝试输入add-migration InitialCreate,但出现以下错误:

PM> add-migration InitialCreate
Exception calling "LoadFrom" with "1" argument(s): "Could not load file or assembly 'file:///C:\Users\user\Documents\Visual Studio 2013\Pro
jects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.PowerShell.Utility.dll' or one of its dependencies. Operati
on is not supported. (Exception from HRESULT: 0x80131515)"
At C:\Users\user\Documents\Visual Studio 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:780 c
har:62
+     $utilityAssembly = [System.Reflection.Assembly]::LoadFrom <<<< ((Join-Path $ToolsPath EntityFramework.PowerShell.Utility.dll))
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

You cannot call a method on a null-valued expression.
At C:\Users\user\Documents\Visual Studio 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:781 c
har:50
+     $dispatcher = $utilityAssembly.CreateInstance <<<< (
    + CategoryInfo          : InvalidOperation: (CreateInstance:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Exception calling "CreateInstanceFrom" with "8" argument(s): "Could not load file or assembly 'file:///C:\Users\user\Documents\Visual Studi
o 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.PowerShell.dll' or one of its dependencies. Opera
tion is not supported. (Exception from HRESULT: 0x80131515)"
At C:\Users\user\Documents\Visual Studio 2013\Projects\DigitalHealthWebPrev\packages\EntityFramework.6.1.3\tools\EntityFramework.psm1:809 c
har:31
+     $domain.CreateInstanceFrom <<<< (
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

PM>

【问题讨论】:

【参考方案1】:

使用包管理器,需要重新安装实体框架:

卸载-Package EntityFramework -Force

然后为每个项目安装它:

安装包EntityFramework

然后别忘了重启工作室。

https://***.com/a/14994432/1845408

【讨论】:

【参考方案2】:

改为使用命令EntityFramework6\add-migration migration name。微软更改了命令的名称。

【讨论】:

你的回答很有用。似乎一开始尝试单独使用 add-migration,它在应用 "enable-migrations" 命令后起作用。我尝试不使用“EntityFramework”开关并出现@noushad-mohammed 错误。我正在使用:VS2019 CE EF 6.4.4 现在我明白为什么每次开始“启用迁移”时都会出现以下消息A version of Entity Framework older than 6.3 is also installed. The newer tools are running. Use 'EntityFramework\Add-Migration' for the older version.谢谢。【参考方案3】:

只需重新启动 Visual Studio 并清理解决方案并重新构建它。

【讨论】:

【参考方案4】:

我今天遇到了一个稍微不同的案例,我在这里写下详细信息,以防可能对某人有所帮助。错误是引用了我的一个程序集,包含 EF DbContext 的程序集依赖于该程序集。 我解决了它,将引用的程序集设置为“复制本地”“true”,以便在构建迁移时制作本地副本,因此能够找到它。

【讨论】:

【参考方案5】:

确保 VS 处于管理员模式

【讨论】:

为了得到一个有用的答案,这个反应需要扩展。解释为什么这是问题的答案。 我的 VS 会话处于管理员模式,出现同样的异常,这不是一个有效的答案。【参考方案6】:

在我的例子中,它是主项目和包含 DbContext 的项目之间的不同实体框架版本。 我刚刚将两个项目中的软件包版本更新为 v6.4.4

【讨论】:

这以及清理/重建和重新启动 VS 为我解决了这个问题。【参考方案7】:

您需要重新安装实体框架:

【讨论】:

【参考方案8】:

我去了“管理解决方案的 Nuget 包...”并更新了我的所有包。这对我有用。

然后我收到另一个错误Cannot bind argument to parameter 'Path' because it is null

在包管理器控制台中运行任何 EF 命令之前,将另一个项目设置为我的 Web 应用程序以外的启动项目,对我有用。

【讨论】:

是的,在“将另一个项目设置为除我的 Web 应用程序之外的启动项目”之后,此错误已解决。谢谢【参考方案9】:

缺少的是(解决方案文件夹)/packages/EntityFramework.6.1.3/tools/ 中的 dll。

我会尝试的事情:

    Nuget 将保留 .nupkg 的副本,您可能会在其中找到丢失的文件 ((Solution Folder)/packages/EntityFramework.X.Y.Z/)(以 zip 格式打开 nupkg) 如果没有,您可能会幸运地在此处手动重新下载软件包 https://www.nuget.org/packages/EntityFramework(确保下载正确的软件包。在您的情况下,它将是 6.1.3)

如果这不起作用,您可以重试上述完全删除和重新安装 EF 的解决方案之一,但请确保为每个项目安装相同的版本。

似乎还有不包含这些文件的版本。例如,在撰写此答案时,6.3.0 实际上不包含 6.1.3 所需的 dll。我也成功地将 dll 从旧版本(如 6.1.3)复制到新版本(如 6.3.1)(可能会发出警告,但通常按预期工作)。

【讨论】:

以上是关于为啥 ef Add-Migration 出现错误的主要内容,如果未能解决你的问题,请参考以下文章

EF Core 迁移错误:PositionalParameterNotFound,Add-Migration

ASP.NET Core EF Add-Migration 命令不起作用

EF CodeFirst 命令步骤

实体框架迁移错误 - 序列不包含任何元素

EF-生成迁移版本

EF Core codefirst数据迁移