1

我将 EF 6.0 与 MySql 结合使用。我使用 EF 的模型构建器向导构建了我的实体模型,并且没有对我的应用程序生成的配置文件进行自定义编辑。我的应用程序在我的计算机上运行良好,但是当我尝试在任何其他机器上安装它时,我收到两个错误:

错误 1:“在配置中找不到指定的存储提供程序或无效”
错误 2:“在配置中找不到指定的命名连接,对指定的 EntityClient 无效,或无效”。

我想如果我解决错误 1,错误 2 可能会消失。我对配置文件一无所知,所以我发布了自动生成的 app.config 的内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <connectionStrings>
    <add name="prismatic_dbEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=pmuser;password=pmuser;persist security info=True;database=prismatic_db&quot;" providerName="System.Data.EntityClient" />
    <add name="prismatic_dbPrivileges" connectionString="metadata=res://*/PMConfigPrivilegesModel.csdl|res://*/PMConfigPrivilegesModel.ssdl|res://*/PMConfigPrivilegesModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=pmuser;password=pmuser;persist security info=True;database=prismatic_db&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
     </defaultConnectionFactory>   
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
   </entityFramework>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
       </dependentAssembly>
     </assemblyBinding>
  </runtime>
</configuration>

我注意到providers开始标签下面有一条蓝色波浪线。下面也是自动生成的内容packages.config(不知道这个是干什么用的):

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.0.1" targetFramework="net45" />
</packages>

在这个,packages开始标签下面有一条蓝色的波浪线。

4

1 回答 1

1

Pawel,你的博客是我的“出发点”。如果您的评论已发布为“答案”,我会将其标记为“答案”。相反,我正在“回答”我自己的问题……不过,感谢您的帮助。

为了解决我的问题:

1)我回滚到 EF5。
2)我回滚到 MySql 连接器 5.6
3)感谢 Pawel 的建议,我进行了以下编辑:

 <providers>
      <provider invariantName="MySql.Data.MySqlClient"
            type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
 </providers>

默认情况下,由于某种原因,此文本引用了 SqlServer。我在网上发现了一些提要,表明这可能是一个错误。

4)我在<配置>部分添加了以下内容:

<system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider"
           invariant="MySql.Data.MySqlClient"
           description=".Net Framework Data Provider for MySQL"
           type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>

我的最终 app.config 文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <connectionStrings>
    <add name="prismatic_dbEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=pmuser;password=pmuser;persist security info=True;database=prismatic_db&quot;" providerName="MySql.Data.MySqlClient" />
    <add name="prismatic_dbPrivileges" connectionString="metadata=res://*/PMConfigPrivilegesModel.csdl|res://*/PMConfigPrivilegesModel.ssdl|res://*/PMConfigPrivilegesModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=pmuser;password=pmuser;persist security info=True;database=prismatic_db&quot;" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
    <add name="MySQL Data Provider"
       invariant="MySql.Data.MySqlClient"
       description=".Net Framework Data Provider for MySQL"
       type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>

  <entityFramework>
     <providers>
      <provider invariantName="MySql.Data.MySqlClient"
            type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
    </providers>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity">
      <parameters>
        <parameter value="v11.0" />
      </parameters>      
    </defaultConnectionFactory>

  </entityFramework>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
       </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

我无法确定是否有必要回滚 EF 和 MySql 连接器。我将尝试尽快回到两者的最新版本。当我这样做时,我会发布我的结果。另外,如果其他人遇到过类似的问题并使用最新版本的连接器和 EF(目前是 EF6 和 MySql 连接器 5.7)成功解决了这些问题,请发布您的结果。多谢你们!

于 2013-11-11T22:30:00.503 回答