DbProviderFactoriesを使用してasp.netcore3.0 netstandard2.1データベース接続

オリジナル: asp.netcore3.0はDbProviderFactoriesを使用してデータベースに接続netstandard2.1

ときSystem.Data.CommonバッグとDbProviderFactoriesに参加していなかった.netstandard2.0で
DbProviderFactoriesクラス.netframeworkは非常に重要な存在であり、彼はデータベースを作成するために、データベースクライアント(などのSQLServer、MySQLの、sqllite、)のフィット多様に頼ることができます接続。
さて、公式リリースと、それは、このリリースでDbProviderFactoriesを.netstandard2.1を達成し、実現した.netcore3.0
image.png

あなたは今、楽しいで.netframeworkのように使用することができます

 DbProviderFactory factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");

このような直接書き込みコードなら、それはエラーになります

System.ArgumentExceptionのは:「指定された不変名 『MySql.Data.MySqlClientは、』登録された.NETデータプロバイダのリストに見つかりませんでした。」

NETコアデータベース接続.NET Frameworkが若干異なります。.NET Frameworkでは、自動システムの全範囲にわたって利用可能なドライバプログラムデータベースは(のmachine.configを介して)使用可能です。MySQLの.NET(mysqlのコネクタネット-xxxxmsiを駆動するために接続されている ) 、それに。
通常では- .NETコアはそうではありません、あなたが使用するデータベースドライバ登録する必要がありますProgram.csかをStartup.cs使用DbProviderFactories.RegisterFactory次のメソッドを登録を完了してください。

SQL Serverの

using System.Data.SqlClient;
DbProviderFactories.RegisterFactory("System.Data.SqlClient", SqlClientFactory.Instance);

MySQLの

using MySql.Data.MySqlClient;
DbProviderFactories.RegisterFactory("MySql.Data.MySqlClient", MySqlClientFactory.Instance);

PostgreSQLの

using Npgsql;
DbProviderFactories.RegisterFactory("Npgsql", NpgsqlFactory.Instance);

SQLiteの

using Microsoft.Data.Sqlite;
DbProviderFactories.RegisterFactory("Microsoft.Data.Sqlite", SqliteFactory.Instance);

これらのシングルトンデータベースアクセス植物がDbProviderFactoryを継承し、データベースクライアントは、パッケージ、そのようMysql.Dataの対応する端部をインストールする必要がありますnuget

それがその後必要な場合には使用されています

DbProviderFactory  factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");
//创建一个数据客户端连接
DbConnection conn = factory.CreateConnection();

アップグレード

プロセスの過程で植物が完了単一のレジスタの実施形態の直接使用は、
公式API植物の種類に応じて使用され、アプリケーションの指定されたセットを完了するために登録することができます

//
        // 参数:
        //   providerInvariantName:
        //
        //   factoryTypeAssemblyQualifiedName:
        public static void RegisterFactory(string providerInvariantName, string factoryTypeAssemblyQualifiedName);

たとえば、MySQLの

  DbProviderFactories.RegisterFactory(providerName, "MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data");

アセンブリは、同じ効果を得ることができ、アプリケーションクラスに続いて植物の種類、の名前の前には、
利点は、あなたがして、パッケージデータベースのMySQLの方法と、フレームにSQLServerのパケット一緒に必要としないことですしかし、データベースクライアントパッケージをロードするためにウェブやデスクトップを使用するようにプロジェクトを引き渡し、あなたは.netframework用として同じプロジェクトを使用することができます。

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/11595811.html