首页 > 解决方案 > 具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序未注册

问题描述

我有一个 .NET Core React Web 应用程序,它调用一个引用实体框架的类库。我正在使用存储在 Azure 中的数据库,每次查询数据库时,都会出现以下异常:

System.ArgumentException: '具有不变名称'System.Data.SqlClient' 的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册,或者无法加载。有关详细信息,请参阅内部异常。

InnerException:ArgumentException:在已注册的 .NET 数据提供程序列表中找不到指定的不变名称“System.Data.SqlClient”。

我在想我的 Web.config/App.config 文件中没有正确配置某些内容,但我不确定。

Web.config我的网络应用程序中的文件:

<configuration>
    <connectionStrings>
        <add name="JATEntities" 
             connectionString="Server=tcp:[someserver].database.windows.net,1433;Database=JAT;persist security info=True;user id=[userid];password=[password];MultipleActiveResultSets=True;" 
             providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

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" />
    </configSections>
    <connectionStrings>
        <add name="JATEntities"  
             connectionString="Server=tcp:[someserver].database.windows.net,1433;Database=JAT;persist security info=True;user id=[userid];password=[password];MultipleActiveResultSets=True;"
             providerName="System.Data.SqlClient" />
    </connectionStrings>
    <entityFramework>
        <providers>
            <provider invariantName="System.Data.SqlClient" 
                      type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
        </providers>
    </entityFramework>
</configuration>

这是我在类库中调用的代码:

public class MyClass 
{
    // I've tried this as it seems to have worked for some people
    private static string __hack = typeof(SqlProviderServices).ToString();

    public void MyMethod()
    {
        using (var context = new JATEntities())
        {
            var query = from listing in context.CurrentListings
                        where listing.Id == id
                        select listing;
        }
    }
}

我还将 ClassLibrary 中的 App.config 文件引用到我的 Web App 项目中,但这似乎没有帮助。


[External Code]
JAT.DB.dll!JAT.DB.Repo.Repo.GetCurrentListingById(int id) Line 22
    at C:\Users\Jungle\source\repos\JAT\JAT.DB\Repo\Repo.cs(22)
JAT.Client.dll!JAT.Client.Controllers.SearchController.FirstMethod() Line 25
    at C:\Users\Jungle\source\repos\JAT\JAT.Client\Controllers\SearchController.cs(25)

[External Code]

标签: c#entity-frameworkazure.net-core

解决方案


对我有用的是升级到 Visual Studio 2019,并创建一个新的 .Net 核心 Web 应用程序和 .net 核心类库,然后将我的所有代码从旧解决方案移动到新解决方案中。


推荐阅读