EF Code First Mysql 到 SQL Server

Posted

技术标签:

【中文标题】EF Code First Mysql 到 SQL Server【英文标题】:EF Code First Mysql to SQL Server 【发布时间】:2017-01-29 01:17:01 【问题描述】:

我有一个 MVC 5 应用程序,我最初配置为使用 mysql,但现在希望它使用 SQL Server。

我的应用首先使用代码和迁移来生成数据库。

更改所有必需的配置后,我尝试从包管理控制台运行更新数据库,但我不断收到此错误:

System.Data.Entity.Core.MetadataException:指定的架构不是 有效的。错误:(0,0):错误 0152:未找到实体框架提供程序 对于具有不变名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序。 确保提供者已在“entityFramework”部分注册 应用程序配置文件。看 http://go.microsoft.com/fwlink/?LinkId=260882 了解更多信息。

创建数据库后出现此错误。它也会在我运行应用程序时出现,因为它会在那时检查是否有任何迁移要做。

尽管所有提供程序都指向 SQL Server,但它仍然尝试使用 MySQL。

欢迎任何帮助。

提前致谢

【问题讨论】:

显然不是所有的提供者都指向 SQLServer 确实非常明显,以至于我试图检查它可能在哪里并且找不到。即使我对所有解决方案文件进行全文搜索,我也找不到单词的踪迹:“Mysql” 这是我唯一的配置文件:pastebin.com/FVf31aJ9 如果您发现错误的提供程序设置在哪里,请告诉我 :) 【参考方案1】:

您需要按照下面提到的步骤来克服上述问题。

第1步:使用NuGet packageremoveinstall相关包。这很重要。

如果在上述步骤后仍无法正常工作,则您必须按照以下步骤操作。

第 1 步:备份您的 projectSQL db 并将其保存在安全的地方。

第 2 步: 之后,您必须在您的应用程序上 delete 您所有的 data migration scripts

第 3 步:同时删除 SQL db

第 4 步: 重新创建所有 Migration scripts again,然后针对 SQL server 运行这些。

注意:您需要执行上述步骤,因为似乎EF 保留provider details 上的db migration scripts

【讨论】:

我会试试这个,然后回来找你。我还没有尝试重建迁移。 我这样做了,效果很好。非常感谢!话虽如此,我对丢失迁移历史的事实感到恼火,因为当然,当我重新生成迁移时,它只会创建一个具有当前数据库状态的迁移,而在 mysql 方面,我有 3 个不同的迁移类.我尝试比较新的单一迁移和其他三个 mysql 迁移类,唯一可能导致问题的更改是已存储在目标字段的 resx 文件中。我猜有对 MySql 提供程序的引用。有没有办法... ... 只重新生成目标字段,同时保留旧的迁移类? 很高兴看到上述解决方案有效 :) 希望你能 accept the solutionUp vote :D to regenerate just the target field while keeping the old migration classes - 实际上那样它不会工作。你可以在单独的项目中尝试.我很确定它在哪里不起作用。 我不得不想知道如何将其标记为正确答案,但我想通了(应该更频繁地提问:D)我正在尝试几件事,但实际上似乎无法恢复那些迁徙,很可惜。在这个项目中,它并不重要,因为它还没有投入生产,但否则这可能会变得很烦人

以上是关于EF Code First Mysql 到 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

从 EF 5 Code First 迁移生成完整的 SQL 脚本

使用 EF Code First + Mysql

Mysql EF Code First

EF Code First 连接MySql

亲测Asp.net Mvc5 + EF6 code first 方式连接MySQL总结

EF 4.1 Code-First 项目上的 MvcMiniProfiler 不分析 SQL