EF6和MySQL从模型生成数据库

时间:2014-02-18 23:19:32

标签: 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.

我有一个空的Console项目和一个非常基本的模型来测试它。通过NuGet Package Console我执行了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连接器。我哪里错了?

2 个答案:

答案 0 :(得分:8)

要支持完整功能,EF Designer需要3件事:

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

因为您似乎没有或使用工作流程/ T4 for MySQL(注意我不知道这是因为您没有选择正确的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。

答案 1 :(得分:2)

另一个答案已经说明了这一点,但它已被埋没在他的长篇文章中。

请注意,错误消息是指SSDLToSQL10.tt。你不想要那个.tt文件,你想要一个MySQL。在EF设计器属性窗口中,找到DDL Generation Template属性并将其从SSDLToSQL10.tt更改为SSDLToMySQL.tt