1

ADO.Net で SqlConnection オブジェクトをインスタンス化すると、このコードによって対応する DbProviderFactory コードが実行されますか? したがって、ブロック 2 のコードが実行されると、実際にはブロック 1 のコードを実行することになります。しかし、これが正しいかどうかはわかりません。

コード ブロック 1 - DbProviderFactory アプローチを使用して SqlConnection をインスタンス化する

DbProviderFactory factory =
DbProviderFactories.GetFactory(providerName);

connection = factory.CreateConnection();
connection.ConnectionString = connectionString;

コード ブロック 2 - 標準の ADO.Net コードを使用して SqlConnection をインスタンス化する

SqlConnection con = new SqlConnection(connectionString);
4

2 に答える 2

3

いくつかの.net Framework アセンブリを調べたところ、次のことがわかりました

DbProviderFactories.GetFactory(providerName)指定されたproviderNameに従って Factory オブジェクトを返します。providerName が SQL プロバイダーを示していると仮定して、SqlClientFactory.

その後factory.CreateConnection()、呼ばれます。この場合、次のSqlClientFactory.CreateConnection()ように実装されて呼び出されます

public override DbConnection CreateConnection()
{
    return new SqlConnection();
}

あなたの質問に対する答えは、ファクトリ メソッドを呼び出すと、プロバイダー固有のクラスのメソッドが呼び出され、その逆ではないということだと思います。

于 2012-09-01T18:57:00.787 に答える