4

我一直在尝试使用代码优先迁移,并且取得了一些有限的成功,但我弄错的一件事是我没有告诉它哪个项目有配置信息。它为我生成了一些类,我有点让它全部工作,但我认为我应该解决配置问题并重新开始。

糟糕的错误。现在我已经尝试删除所有迁移的东西,我发现我无法重新安装它。我已经卸载并重新安装了 EF 5,但是当我使用该Enable-Migrations命令时,我得到一个异常报告:

System.Runtime.Serialization.SerializationException:未解析成员“System.Data.Entity.Migrations.Design.ToolingFacade+GetContextTypeRunner,EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的类型。

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

4

7 回答 7

29

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

于 2012-11-26T20:08:26.850 回答
3

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

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

于 2012-10-30T18:06:55.137 回答
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>
于 2018-07-26T23:13:51.343 回答
0

写这个原因也许有一天它会对某人有所帮助 - 只是遇到了同样的问题并且(愚蠢的)问题是连接字符串中的错误主机名。

于 2016-09-15T07:06:01.747 回答
0

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

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

于 2017-01-24T04:51:26.823 回答
0

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

于 2017-08-07T14:26:58.887 回答
0

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

于 2018-06-26T08:57:00.917 回答