web-dev-qa-db-ja.com

.NET SQL Clientを.NET Core 2.1にインストールした後、DbProviderFactories.GetFactoryClassesが結果を返さない

DbProviderFactoryをサポートするようになったため、ライブラリを.NET Core 2.1に移植しています。ほとんどの場合、問題はありません。コンパイルはできますが、実行するとエラーが発生します。

System.ArgumentException: '指定されたインバリアント名' System.Data.SqlClient 'が、登録された.NETデータプロバイダーのリストに見つかりませんでした。'

DbProviderFactories.GetFactoryClasses()を使用して、プロバイダーがインストールされているかどうかを確認しました。プロバイダーが表示されない(結果のテーブルに行が0)。

ですから、私の質問は、.NET Coreのデータプロバイダーをどのようにインストールできるでしょうか。マシンに.NET Framework 4.5があり、データプロバイダーを問題なく取得しています。ローカルプロジェクトのSystem.Data.SqlClientをNugetとしてインストールしたくありません。これは、DbProviderFactoryを無関係にする依存関係を追加するためです。そうは言っても、私のライブラリをテストとして使用するプロジェクトにSystem.Data.SqlClientをインストールしようとしましたが、まだピックアップされていません。

9
Allan Jardine

.NET Frameworkでは、プロバイダーはmachine.configを介して自動的に使用可能になり、GACにもグローバルに登録されます。 .NET Coreでは、GACまたはグローバル構成はもうありません。つまり、次のように、まずプロジェクトにプロバイダーを登録する必要があります。

using System.Collections.Generic;
using System.Data.CData.MySQL; // Add a reference to your provider and use it
using System.Data.Common;
using System.Linq;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Register the factory
            DbProviderFactories.RegisterFactory("test", MySQLProviderFactory.Instance);

            // Get the provider invariant names
            IEnumerable<string> invariants = DbProviderFactories.GetProviderInvariantNames(); // => 1 result; 'test'

            // Get a factory using that name
            DbProviderFactory factory = DbProviderFactories.GetFactory(invariants.FirstOrDefault());

            // Create a connection and set the connection string
            DbConnection connection = factory.CreateConnection();
            connection.ConnectionString = "Server = test, Database = test";
        }
    }
}

ご覧のとおり、この場合、プロバイダーへの参照 "System.Data.CData.MySQL"を追加する必要がありました。

利用可能なプロバイダーをすべて入手できなくなったのは残念ですが、これが.NETコアで使用する必要があるものです。

このGitHub corefxの問題)からの情報

11
Joshua VdM

Amerが前述したように:

.netコアでは、ファクトリを登録する必要があります

SQLの場合:DbProviderFactories.RegisterFactory( "System.Data.SqlClient"、SqlClientFactory.Instance);

ただし、これを行うには、System.Data.SqlClient nugetパッケージをプロジェクトに追加します。

このように(ツール-> Nugetパッケージマネージャー->パッケージマネージャーコンソール)

Find-Package SQLClient
Install-Package System.Data.SqlClient -ProjectName YourProjectName
1

.netコアでは、ファクトリを登録する必要があります

SQLの場合:DbProviderFactories.RegisterFactory( "System.Data.SqlClient"、SqlClientFactory.Instance);

0
Amer Jamaeen