mysql - EF6 和 MySQL 从模型生成数据库

标签 mysql entity-framework visual-studio-2013

我已经尝试了在网上找到的所有解决方案,但都没有成功。我不断收到错误:

Running transformation: System.InvalidOperationException: The SSDL generated by the activity
called 'CsdlToSsdlAndMslActivity' is not valid and has the following errors: 
  No Entity Framework provider found for the ADO.NET provider with invariant name
'MySql.Data.MySqlClient'. Make sure the provider is registered in the 'entityFramework' 
section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for 
more information.

我有一个空的控制台项目和一个非常基本的模型来测试它。通过我执行的 NuGet 包控制台:Install-Package MySQL.Data.Entities 安装了 EF6、MySQL.DataMySQL.Data.Entities 并连接所有引用并将相关的 DLL 复制到 bin/Debug 文件夹中。

我在下面连接了提供者(列出了整个配置文件)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6"></provider>
    </providers>
  </entityFramework>
</configuration>

据我所知,我已经注册了提供商。我也更新了最新的 MySQL 连接器。我哪里错了?

最佳答案

要支持完整的功能,EF 设计器需要 3 个东西:

  • EF 运行时提供程序(您似乎拥有它)
  • 数据库的 DDEX 提供程序 - DDEX 是 VS 抽象数据库的方式,因此可以与任何数据库对话。请注意,这不是特定于 EF 的东西,而是 EF Designer 依赖于它(同样,您似乎拥有它,否则您将无法选择 MySQL 连接)
  • 支持 Model First 流程所需的其他组件(T4 模板/工作流事件)- 这些是 EF 特定的,但通常作为 DDEX 提供程序的一部分安装 - 您似乎缺少这个或您没有选择 T4 模板/workflow 特定于您的提供商(打开 edmx 文件并转到属性窗口,从 DDL 生成的角度来看,那里有两个有趣的选项 - “数据库生成工作流”和“DDL 生成模板”。单击下拉列表以查看是否您可以选择特定于 MySQL 的内容)

因为您似乎没有或没有使用 MySQL 的工作流/T4(请注意,我不知道这是因为您没有选择正确的 T4/工作流(见上文)还是 MySQL DDEX 不支持这个或安装因任何原因损坏)EF Designer 使用的是用于 Sql Server 的默认工作流。默认工作流依赖于能够在默认路径中找到 EF 提供程序(用于 SqlServer 和 SqlServerCe),但 MySQL 的提供程序不存在 - 因此出现错误。请注意,用于创建 DDL 的工作流和 T4 模板是特定于提供程序的,因此即使您将 MySQL 提供程序复制到默认路径,它也不会真正起作用——您会得到使用 MySQL 类型的 SQL Server 特定 SQL 脚本的特殊结果。

我们有一个 bug通过提供更好的指导而不是仅仅调用我们知道不会工作的默认 DDL 生成来稍微改进这一点。您还可以在此 bug 中找到一些详细信息.

我建议检查您使用的 MySQL 组件是否支持 Model First。一种替代方法是转移到 Code First,它只需要您已经拥有的 EF 运行时提供程序来生成 DDL。

关于mysql - EF6 和 MySQL 从模型生成数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21867662/

相关文章:

mysql - 如何用 MySQL DB 替换 SQL DB 并启用 Entity Framework Code First?

c# - MVC3 Razor View,在另一个项目中使用实体模型

html - &lt;!DOCTYPE html> - 文档类型声明只能出现一次

visual-studio-2013 - 错误 MSB4057 : The target "v8" does not exist in the project

如果值大于当前值则 MySQL 更新

java - 映射实体,列表作为映射值。通过 JDBC 语句执行 DDL "drop table if exists ` single_line`"时出错

c++ - 使用 MYSQL 服务器 (mingw32-make) 为 QT 构建驱动程序时出错

c# - 带有 Entity Framework 的 MVVM 模型

c++ - 尝试编译 Eigen 时 Visual Studio 2013 崩溃

php - 我想使用 PHP 将表单中的数据插入到表中,然后从另一个表中选择另一个数据并插入到第三个表中