实体框架到 MySql 连接到数据库失败 [重复]

Posted

技术标签:

【中文标题】实体框架到 MySql 连接到数据库失败 [重复]【英文标题】:Entity Framework to MySql connection failed to database [duplicate] 【发布时间】:2018-10-13 22:13:00 【问题描述】:

使用 Entity Framework 6 连接到 mysql 数据库时出现以下错误

访问数据库时出错。这通常意味着 与数据库的连接失败。检查连接字符串是 正确并且正在使用适当的 DbContext 构造函数 指定它或在应用程序的配置文件中找到它。

这是我的代码:

public class TestDbContext : DbContext

    public TestDbContext()
       : base("name="mysqldb")
    

    
    public DbSet<holidays> holidays  get; set; 



<configSections>
<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="mysqldb" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;userid=root;password=admin;database=bobdata;/> </connectionStrings>

<entityFramework>
    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
    <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.10.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
    </providers>
  </entityFramework>

在给定消息下方的内部异常中

"按方法尝试 'MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection)' 访问方法 'MySql.Data.MySqlClient.MySqlConnection.get_Settings()' 失败。"

【问题讨论】:

【参考方案1】:

您似乎正在使用 MySql.Data.Entity 6.10.7。我猜你也在使用 MySql.Data 8.0.11。

这两个库不兼容。对于 v8.x,Oracle renamed the package 到 MySql.Data.EntityFramework。你需要卸载MySql.Data.Entity并安装MySql.Data.EntityFramework

【讨论】:

谢谢,这被阻止了几个月,不得不使用旧版本的 MySql.Data 和 MySql.Data.Entity。 太棒了,伙计 完美解决方案!那是错误的软件包,现在可以使用了,谢谢:-)【参考方案2】:

我认为问题是因为您在连接字符串中使用了用户 ID 而不是 UID,请将用户 ID 更改为 UID

【讨论】:

感谢快速重播。我也尝试过使用 UID,但它不起作用。【参考方案3】:

根据您提供的信息(还有其他可能导致此问题的原因)并假设凭据正确,值得尝试以下操作:

TestDbContext 类中:

public class TestDbContext : DbContext

    public TestDbContext()
       : base("mysqldb")
      
    

    public static TestDbContext Create()
    
        return new TestDbContext();
    

    public DbSet<holidays> holidays  get; set; 

在 web.config 中:

<add name="mysqldb" providerName="MySql.Data.MySqlClient" connectionString="server=localhost;database=bobdata;uid=root;password=admin;" />

基于 cmets 的更新:

如果您仍然收到错误,我建议您开始一个新项目,只是为了建立一个成功的数据库连接并从那里逐步修改您的连接字符串。然后,您可以将此项目中已建立的设置复制到您现有的项目中。确保 db 上下文中的连接字符串名称与 web.config 中的相同,并以“标准”连接字符串开头,如下所示:

public class TestDbContext : DbContext

    public TestDbContext() : base("ThisIsMyConnectionStringName")
      
    

    public static TestDbContext Create()
    
        return new TestDbContext();
    

    public DbSet<holidays> holidays  get; set; 


  <connectionStrings>
    <add name="ThisIsMyConnectionStringName" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\My-Database-Name.mdf" providerName="System.Data.SqlClient" />
  </connectionStrings>

使用此设置,数据库文件(名为 My-Database-Name.mdf)将驻留在 App_Data 文件夹中。然后搜索那里的连接字符串设置(有大量资源)并逐步将内容更改为您想要的内容。这样一来,您就可以从实际拥有数据库和连接的地方作为起点,而不是试图从可能由多种原因引起的错误消息中向后工作。

【讨论】:

进行上述更改后,出现同样的错误“访问数据库时发生错误。” 我需要为 Visual Studio 安装 MySQL @Dhiraj Mane 用建议更新了答案

以上是关于实体框架到 MySql 连接到数据库失败 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

创建索引时,具有mysql数据库迁移的实体框架失败

当 WCF 服务到 TCP/IP 时,底层提供程序在开放实体框架上失败

无法从 MYSQL Workbench 6.3 CE 连接到 MS SQL 服务器 [重复]

实体框架 - Linq 中的数据库视图或连接到实体

无法将实体框架与 MySQL 一起使用

无法从java连接到mysql [重复]