实体框架到MySql连接失败了数据库

时间:2018-05-03 14:39:04

标签: c# mysql asp.net-mvc entity-framework-6

我在使用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>

在下面给出的内部异常消息

  

{&#34;尝试方法   &#39; MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection)&#39;   访问方法   &#39; MySql.Data.MySqlClient.MySqlConnection.get_Settings()&#39;失败&#34;}

3 个答案:

答案 0 :(得分:8)

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

这两个库不兼容。适用于v8.x的Oracle renamed the packageMySql.Data.EntityFramework。您需要卸载MySql.Data.Entity并安装MySql.Data.EntityFramework

答案 1 :(得分:-1)

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

答案 2 :(得分:-1)

根据您提供的信息(还有其他可能导致此问题的事情)并假设凭据正确无误,值得尝试:

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;" />

根据评论更新:

如果您仍然收到错误,我建议您启动一个新项目,以建立成功的数据库连接并从那里逐步修改您的连接字符串。然后,您可以将此项目中已建立的设置复制到现有项目中。确保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文件夹中。然后在那里搜索连接字符串设置(有大量资源)并逐步将事物更改为您想要的内容。这样,您将从实际拥有数据库的地方和连接作为起点,而不是尝试从可能由许多事情引起的错误消息向后工作。