【问题标题】:Enity Framework With MySQL带有 MySQL 的实体框架
【发布时间】:2014-03-24 03:14:24
【问题描述】:

我收到以下错误

“无法加载在 ADO.NET 提供程序的应用程序配置文件中注册的实体框架提供程序类型 'MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity' 具有不变的名称 'MySql.Data.MySqlClient' . 确保使用了程序集限定名称并且程序集可供正在运行的应用程序使用。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882。"

但是我的项目中确实引用了 MySql.Data.dll 和 MySql.Data.Entity.dll 以及 MySql.Data.Entity.EF6.dll(来自 MySQL Connector Net 6.8.3)

这是我的 App.conf

<?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>
 <connectionStrings>
  <add name="inspectm_inspectContext" connectionString="server=--user id=--;password=--;database=--;persistsecurityinfo=True" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>
<system.data>
  <DbProviderFactories>
    <add name="MySQL Data Provider"
    invariant="MySql.Data.MySqlClient"
    description=".Net Framework Data Provider for MySQL"
    type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  </DbProviderFactories>
</system.data>
<entityFramework>
<defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
<providers>
  <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity" />
</providers>
</entityFramework>
</configuration>

【问题讨论】:

    标签: mysql entity-framework


    【解决方案1】:
    <?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>
      <connectionStrings>
        <add name="inspectm_inspectContext" connectionString="server=--;user id=--;password=--;database=--;persistsecurityinfo=True" providerName="MySql.Data.MySqlClient" />
      </connectionStrings>
      <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, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
         </providers>
      </entityFramework>
    </configuration>
    

    我的 Complete App.conf 这对我有用

    首先我删除了

    <DbProviderFactories>
    <add name="MySQL Data Provider"
    invariant="MySql.Data.MySqlClient"
    description=".Net Framework Data Provider for MySQL"
    type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
    

    然后我变了

    <defaultConnectionFactory type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    

    并添加了提供者

    <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    

    【讨论】:

    • 您能否添加一些关于更改内容的说明?
    【解决方案2】:

    对于任何面临同样问题的人,这里是导致异常的行是这个

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

    只需将 .EF6 附加到 MySql.Data.Entity 以便提供程序是这样的

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

    因此,您选择删除其中的代码无助于解决问题。我希望这对某人有所帮助。

    【讨论】:

    • 对于连接器 .NET 8.0,引用的文件现在是 MySql.Data.EntityFramework.dll,因此您可能必须使用 MySql.Data.EntityFramework 而不是 MySql.Data.Entity.EF6。新文件仍被视为 Framework 6。
    【解决方案3】:

    您还可以执行以下操作

    [DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
    public class DemoContext : DbContext{}
    {
    

    【讨论】:

    • 什么是“DbConfigurationType”?它不是 VS 中的建议导入。
    • @StealthRabbi 它位于 MySql.Data.EntityFramework 命名空间中。
    【解决方案4】:

    检查内部异常。

    我明白了

    {"Inheritance security rules violated by type: 'MySql.Data.Entity.MySqlEFConfiguration'. Derived types must either match the security accessibility of the base type or be less accessible.":"MySql.Data.Entity.MySqlEFConfiguration"}

    这指向我: Inheritance security rules violated by type: 'MySql.Data.Entity.MySqlEFConfiguration'

    我真的不喜欢降级。但到目前为止我还没有找到更好的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2018-10-18
      • 2022-11-17
      • 2015-12-26
      • 1970-01-01
      • 2011-08-08
      • 2018-04-04
      相关资源
      最近更新 更多