Mysql + Visual Studio 2012“无法找到或加载已注册的.Net Framework数据提供程序”

时间:2013-09-06 14:43:50

标签: c# mysql visual-studio visual-studio-2012 entity-framework-5

Mysql + Visual Studio 2012

"Failed to find or load the registered .Net Framework Data Provider"

大家好,我想就我遇到的这个错误寻求帮助。我使用带有entity framework 5的Visual Studio 2012和通过此链接http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html下载的mysql。在项目中,我添加了ADO.NET实体数据模型,其中包含“从数据库生成”,即带有端口3307的MySql(其他3306使用)。我测试了连接,并说“测试连接成功”。所以我开始使用insert查询编写数据库。当我测试跑步时,它会蹲下来说

"Failed to find or load the registered .Net Framework Data Provider". 

非常感谢您的帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

最简单的答案就是通过NuGet安装MySQL.Data和MySQL.Data.Entities包。只使用MySQL for Windows安装程序不会添加所需的DLL和项目引用,但NuGet会自动为您执行此操作。

这是一个链接...使用前两个包:http://www.nuget.org/packages?q=mysql

答案 1 :(得分:0)

没有app.config的代码的另一种方式:(不要忘记在此代码中设置正确的MySql.Data版本)

  public class MySqlDbConfiguration: DbConfiguration 
{
    public MySqlDbConfiguration()
    {
        SetDefaultConnectionFactory(new MySqlConnectionFactory());
        SetProviderServices(MySqlProviderInvariantName.ProviderName, new MySqlProviderServices());
        RegisterFactoryIfRequired();
    }

    private static void RegisterFactoryIfRequired()
    {
        string dataProvider = @"MySql.Data.MySqlClient";
        string dataProviderDescription = @".Net Framework Data Provider for MySQL";
        string dataProviderName = @"MySQL Data Provider";
        string dataProviderType =
            @"MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d";

        bool addProvider = true;
        var dataSet = ConfigurationManager.GetSection("system.data") as DataSet;
        foreach (DataRow row in dataSet.Tables[0].Rows)
        {
            if ((row["InvariantName"] as string) == dataProvider)
            {
                // it is already in the config, no need to add.
                addProvider = false;
                break;
            }
        }

        if (addProvider)
            dataSet.Tables[0].Rows.Add(dataProviderName, dataProviderDescription, dataProvider, dataProviderType);

        // test it
        var factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
    }

}