实体框架代码首次迁移 - 启用 - 迁移失败

时间:2012-10-30 17:48:44

标签: ef-code-first entity-framework-5 ef-migrations

我一直在尝试使用代码优先迁移,并取得了一些有限的成功,但我遇到的错误之一就是我没有告诉它哪个项目有配置信息。它为我生成了一些类,我把它全部搞定了,但我想我应该解决配置问题并重新开始。

错误。既然我已经尝试删除所有迁移内容,我发现无法重新安装它。我已经卸载并重新安装了EF 5,但是当我使用Enable-Migrations命令时,我收到了异常报告:

  

System.Runtime.Serialization.SerializationException:Type不是   为会员解决   “System.Data.Entity.Migrations.Design.ToolingFacade + GetContextTypeRunner,的EntityFramework,   Version = 4.4.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'。

无论我现在做什么,我似乎都无法超越。有什么想法吗?

7 个答案:

答案 0 :(得分:29)

这件事发生在我身上,因为我在项目的路径中有一个特殊的角色 - 特别是&符号& 。我删除了&符号,然后一切都像魅力一样。

答案 1 :(得分:3)

好吧,我不知道为什么从一开始就不会出现这个问题,但事实证明这个问题是由于我有一些针对.NET 4.5的项目和一些针对.NET 4.0的项目引起的。这意味着那些项目使用不同版本的EF 5(v5与v4.4),我认为这导致了问题;它试图加载错误版本的DLL。

当我从我的解决方案中卸载面向.NET 4.5的项目时,我可以在针对.NET 4的项目上使用Enable-Migrations。

答案 2 :(得分:1)

我发现了发生此问题的另一种方式,所以我想在这里分享以供将来参考:-)。

在我们的情况下,我们在Web.config文件中收到无效的绑定重定向:

<dependentAssembly>
   <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
   <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.2.0.0" />
   <codeBase version="6.0.0.0" href="libs/EntityFramework.dll" />
</dependentAssembly>

即使NuGet软件包版本为 6.2 ,程序集版本仍为 6.0.0.0 。使用此重定向可能不会导致代码问题,但会破坏powershell EF命令以及migrate.exe工具。

解决方案是删除绑定或使用正确的版本- 6.0.0.0

<dependentAssembly>
   <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
   <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
   <codeBase version="6.0.0.0" href="libs/EntityFramework.dll" />
</dependentAssembly>

答案 3 :(得分:0)

写这个原因可能有一天它会帮助某人 - 只是遇到同样的问题而且(愚蠢的)问题是connectionString上的主机名错误。

答案 4 :(得分:0)

我的项目收到了命名约定的错误。 MyProject.MyProject.Web,MyProject.MyProject.EntityFramework等。

我将其更改为MyProject.MyProject2.Web等

答案 5 :(得分:0)

我的项目文件夹路径有一个单词Q&amp; A。一旦我改为QA并重新运行迁移,这个问题就消失了。 避免'&amp;'项目路径中任何文件夹名称中的字符。

答案 6 :(得分:0)

我遇到了同样的问题,这可能是由于更改项目名称和/或将其移动到项目文件夹结构中引起的。无论如何,通过重新创建项目并手动导入(添加现有项目)我所有的.cs文件,然后添加新的迁移来解决了该问题。