我已经尝试过我在网上找到的所有解决方案都没有成功。我不断得到错误:
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.Data
和MySQL.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连接器。我哪里错了?
答案 0 :(得分:8)
要支持完整功能,EF Designer需要3件事:
因为您似乎没有或使用工作流程/ 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
。