【问题标题】:Entity Framework code first migrations throwing error实体框架代码第一次迁移抛出错误
【发布时间】:2012-11-29 17:22:15
【问题描述】:

这是我在收到此错误之前所做的:

  1. 已安装 EF(预发布版本,可能是 6,我不知道)
  2. 决定我不想要,所以卸载了它并重新安装了稳定版 (5)
  3. 通过 SSMS 截断了我的数据库

这是错误:

Exception calling "CreateInstanceFrom" with "8" argument(s): "Could not load file or      
assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicK
eyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest   
definition does not match the assembly reference. (Exception from H
RESULT: 0x80131040)"
At C:\Projects\BCATracker.Web\packages\EntityFramework.6.0.0- 
alpha2\tools\EntityFramework.psm1:425 char:31
+     $domain.CreateInstanceFrom <<<< (
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodTargetInvocation

这是我尝试过的:

  • 从 bin 目录中删除所有内容,重新构建。
  • 从 nuget 中移除 EF,删除 packages 目录下的文件,在 nuget 中读取 ef。

查看 proj 文件我看到了这个:

<Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
</Reference>

可能的根本原因是什么?

【问题讨论】:

  • 为什么你有 3 个版本的 EF? EF6 alpha2 (6.0.0.0)、EF5 用于 .NET Framework 4.5 (5.0.0.0) 和 EF 5 用于 .NET Framework 4 (4.4.0.0)。你想用什么版本?如果您没有任何其他包 - 手动删除对 EntityFramework.dll 的所有引用。如果您想使用 EF6,请删除对 System.Data.Entity.dll 的引用(如果有的话)。删除 packages.config (如果你有其他 nuget 包,你会破坏它们)。安装要使用的 EF 版本。 (我想知道您最终遇到的混乱是否是由于重新定位您的项目造成的......)
  • 我想为 .net 4.0 定位 5,我以为我是这样,但由于我短暂地添加了 6 alpha,一切都搞砸了。 ef 4.4 需要什么 dll?
  • 然后按照我上面所说的清理你的项目,但不要删除对 System.Data.Entity.dll 的引用。确保您的项目面向 .NET Framework 4。从包管理器控制台运行 Install-Updates EntityFramework 或使用 GUI - 确保您没有安装 EF6。这应该会为您提供 EntityFramework.dll 4.4.0.0,它是 .NET Framework 4 的 EF5。您现在应该也可以使用 Uninstall-Package。当我想重新定位 .NET Framework 版本时 - 我总是先卸载 EF,重新定位并再次安装 EF 以确保我拥有正确的版本。
  • 非常严重地陷入了同样的问题!
  • 这解决了我的问题:这个问题正在发生,因为您可能在项目中使用了多个版本的实体框架包。请参考:pinfaq.com/93/…

标签: entity-framework c#-4.0 ef-code-first database-migration


【解决方案1】:

我发现了问题所在。 EntityFramework.dll 需要在 GAC 中,Visual Studio 才能从包管理器中使用它。

  1. 启动 Visual Studio 命令提示符(确保以管理员身份启动 Visual Studio)
  2. 转到您的包目录并找到 EntityFramework 包目录。
  3. 转到 lib\net45(如果目标为 4.5)
  4. 类型:gacutil /i EntityFramework.dll

注意:此时完全重新启动计算机可能是明智之举。

我不确定为什么 Visual Studio 停止看到 DLL,但这让我解决了这个问题。

【讨论】:

  • 非常感谢!看来,在 Windows 7 更新后我遇到了这个问题。
  • 没问题!如果这回答了你的问题,请接受这个作为答案。我得到积分。 :-)
  • 以上说明需要进行一些更正。 1) 您需要启动 Visual Studio 工具命令提示符(通常从 Visual Studio 安装菜单下的开始菜单)而不是一般命令提示符。 5) 您无需重新启动 Visual Studio 即可识别更改。希望对您有所帮助...
【解决方案2】:

我相信我可以找到解决方案。我的解决方案中有几个项目。

我的数据库逻辑在 SqlDataAccess 中。该程序集在 WebUI 中被引用。

我从 DomainLogic 开始。在那里为存储库基类定义 POCO。

然后我添加了 SqlDataAccess 项目。

并尝试了Enable-Migrations, Add-MigrationUpdate-Database 命令。它运行良好。在我将 WebUI(基于 MVC 4 的 Web 应用程序添加到项目并运行上述命令后。我开始收到此版本错误。

我卸载项目WebUI 并重新运行命令。它再次运行良好。因此,即使它不是最佳解决方案,您也可能希望卸载其他项目,将数据库项目留在解决方案中,然后运行这些命令。它对我有用。万事如意!

【讨论】:

    【解决方案3】:

    我在使用代码优先迁移时也遇到了这个问题。只需将实体框架版本更新为实体框架版本 6.1.3 即可解决此问题。 在包管理器控制台“Install-Package Entity Framework -version 6.1.3”上使用命令

    【讨论】:

      【解决方案4】:
      1. 打开 Manage NUGET Packages for solution... 窗口并更新 EntityFramework
      2. 重启 Visual Studio
      3. 在包管理器控制台中运行命令 Enable-Migrations -ContextTypeName Movie.Models.MovieDBContext(这是一个示例上下文)

      【讨论】:

        【解决方案5】:

        安装 EF 6.1.3 即可解决问题。

        【讨论】:

          【解决方案6】:

          是的,上面的评论对我有用。

          EntityFramework.dll 需要在 GAC 中,Visual Studio 才能从包管理器中使用它。

          1. Start Visual Studio Command Prompt (ensure you started Visual Studio as Administrator) 
          2. Go to your packages directory and find the    EntityFramework package directory. 
          3. Go to lib\net45 (if targeting 4.5)    
          4. type: gacutil /i EntityFramework.dll 
          

          注意:此时完全重新启动计算机可能是明智之举。

          C:\Windows\system32>cd..
          
          C:\Windows>cd..
          
          C:\>cd \packages\EntityFramework.5.0.0\lib\net45
          
          C:..\packages\EntityFramework.5.0.0\lib\net45>
          gacutil /i EntityFramework.dll
          

          这绝对有效。

          【讨论】:

            【解决方案7】:

            执行以下操作来解决此问题:

            1)从包中卸载实体框架(管理 NUGET 包)。

            2)重新启动 Visual Studio。

            3)从包管理器重新安装实体框架。

            4)添加对 System.Data.Entity 的引用。

            5) 在包管理器控制台中运行命令 Enable-Migrations -ContextTypeName Movie.Models.MovieDBContext(这是一个示例上下文)。

            在此之后,您可以看到 packages.config 中反映的更改。

            【讨论】:

              【解决方案8】:

              我有 Windows 10。以下步骤更正了问题

              1. 打开程序和功能并搜索“实体”
              2. 我注意到在 2015 年 7 月 22 日更新 6.1.3 之后,于 2016 年 1 月 23 日安装了更新
              3. 选择了“Entity Framework 6.1.3”等更新
              4. 单击“修复”按钮。修复完成后,我重新启动了 Visual Studio,问题不再出现。

              感谢@Farshid 提供解决方案的初步线索。

              【讨论】:

                【解决方案9】:

                我也遇到了同样的错误,在这个错误上浪费了很多时间 **这只是因为我更新了实体框架,但它给出了这个错误,所以我再次安装 Entity Framework 6.0.0 ** 错误已解决

                enter image description here

                【讨论】:

                  猜你喜欢
                  • 2018-01-29
                  • 2016-03-05
                  • 2016-03-29
                  • 2013-01-02
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-16
                  • 2013-08-02
                  相关资源
                  最近更新 更多