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
をインストールしようとしましたが、まだピックアップされていません。
.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コアで使用する必要があるものです。
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
.netコアでは、ファクトリを登録する必要があります
SQLの場合:DbProviderFactories.RegisterFactory( "System.Data.SqlClient"、SqlClientFactory.Instance);