Entity framework 实体框架代码首次迁移引发错误

Entity framework 实体框架代码首次迁移引发错误,entity-framework,c#-4.0,ef-code-first,database-migration,Entity Framework,C# 4.0,Ef Code First,Database Migration,以下是我在出现此错误之前所做的操作: 已安装EF(预发布版本,可能是6,我不知道) 决定我不想要,所以卸载了它并重新安装了稳定版本(5) 通过SSMS截断了我的数据库 以下是错误: Exception calling "CreateInstanceFrom" with "8" argument(s): "Could not load file or assembly 'EntityFramework, Version=5.0.0.0, Culture=neutral, PublicK

以下是我在出现此错误之前所做的操作:

  • 已安装EF(预发布版本,可能是6,我不知道)
  • 决定我不想要,所以卸载了它并重新安装了稳定版本(5)
  • 通过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
    
    使用“8”参数调用“CreateInstanceFrom”时出现异常:“无法加载文件或”
    程序集的EntityFramework,版本=5.0.0.0,区域性=中性,PublicK
    eyToken=b77a5c561934e089'或其依赖项之一。找到的程序集清单
    定义与程序集引用不匹配。(H中的异常
    结果:0x8013100)
    在C:\Projects\BCATracker.Web\packages\EntityFramework.6.0.0-
    alpha2\tools\EntityFramework.psm1:425字符:31
    
    +$domain.CreateInstanceFrom我相信我能找到一个解决方案。我的解决方案中有几个项目

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

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

    然后我添加了SqlDataAccess项目

    并尝试了
    启用迁移、添加迁移
    更新数据库
    命令。它运行良好。在我将WebUI(一个基于MVC4的web应用程序)添加到项目中并运行上面的命令之后,我开始出现这个版本错误


    我卸载了项目
    WebUI
    并重新运行了该命令。该命令再次正常运行。因此,即使这不是最佳解决方案,您也可能希望卸载其他项目,将Database项目保留在解决方案中,然后运行这些命令。这对我很有效。最好的做法是!执行以下操作以解决此问题:

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

    2) 重新启动VisualStudio

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

    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 
    
    4) 添加对System.Data.Entity的引用

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


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

    我解决了问题。EntityFramework.dll必须位于GAC中,Visual Studio才能从包管理器使用它

  • 启动Visual Studio命令提示符(确保以管理员身份启动Visual Studio)
  • 转到包目录并找到EntityFramework包目录
  • 转到lib\net45(如果目标为4.5)
  • 类型: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
    

    我不知道为什么Visual Studio停止查看DLL,但这让我克服了这个问题。

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

  • 打开解决方案的管理NUGET包。。。窗口和更新EntityFramework
  • 重新启动Visual Studio
  • 在package manager控制台中运行命令Enable Migrations-ContextTypeName Movie.Models.MovieDBContext(这是一个示例上下文)

  • 安装EF 6.1.3,这将解决问题。

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

  • 打开程序和功能并搜索“实体”
  • 我注意到在2015年7月22日的6.1.3更新之后,于2016年1月23日安装了更新
  • 选择“实体框架6.1.3”等。。更新
  • 点击“修复”按钮。修复完成后,我重新启动了Visual Studio,问题不再出现 感谢@Farshid提供了解决方案的初步线索


    是的,上面的评论对我来说是正确的

    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
    

    这肯定会起作用。

    我也遇到了同样的错误,在这个错误上浪费了很多时间 **这只是因为我更新了entity framework,但它出现了此错误,所以我再次安装entity framework 6.0.0** 解决错误


    为什么您有3个版本的EF?EF6 alpha2(6.0.0.0)、EF5(用于.NET Framework 4.5)(5.0.0.0)和EF5(用于.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为目标。从Package Manager控制台运行
    安装更新EntityFramework
    或使用GUI-确保您没有安装EF6。这将使您获得EntityFramework.dll 4.4.0.0,即.NET Framework 4的EF5。您现在还应该能够使用卸载软件包。当我想重新定位.NET Framework版本时-我总是先卸载EF,然后重新定位并安装EF,以确保我的版本正确。同样的问题非常严重!这就解决了我的问题:这个问题之所以发生,是因为您可能在项目中使用了多个版本的实体框架包。参考这个:非常感谢!看起来,在Windows7更新之后,我遇到了这个问题。没问题!如果这回答了你的问题,请接受这个作为答案。我得到了分数。:-)需要对上述说明进行一些更正。1) 你需要