Dapperを使用したIDbConnectionファクトリ

asp.net c# dapper

質問

私はASP.NET WebFormsソリューションでdapperを使用しています。

データを処理するすべてのクラスは、この基本クラスから開いている接続を取得します。

public abstract class SalesDb : IDisposable
{
    protected static IDbConnection OpenConnection()
    {
        IDbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesDb"].ConnectionString);
        connection.Open();
        return connection;
    }

    public void Dispose()
    {
        OpenConnection().Dispose();
    }
}

この基本クラスを使用するサービスクラスの例

public class LeadService : SalesDb
{
    public IEnumerable<LeadDto> Select()
    {
        using (IDbConnection connection = OpenConnection())
        {
            return connection.Query<LeadDto>("Lead_Select",
                null, null, true, null, CommandType.StoredProcedure);
        }
    }
}

基本クラスのOpenConnection( )メソッドが静的であり、すべての呼び出しで新しいインスタンスを返すという欠点はありますか?

受け入れられた回答

新しい接続を作成していますか?それは動作しません! 100回以上の反復を持つ単純なループを使用すると(最大プールサイズのデフォルトは100)、何らかの例外が発生することがあります( 開いている接続数が多すぎExecuteReaderには開いている接続などが必要です )。

いずれにしても、プールは新しい物理接続を連続して作成する必要があるため、重大なパフォーマンス上の問題が予想されます。

私はConnection-Poolを再構築しません。私のアドバイスです:そのクラスを使用しないでください、asp.netでもっと。

Connection-Poolの領域に密着しないでください ;-)

しかし 、あなたの質問は両方ともNoと答えることができます。静的メソッドは問題ではなく(静的接続とは異なり)、(プールは現在使用されていない接続を返すので)常に新しい接続を返します。しかし、あなたのクラスの主な問題は、接続を作成して開くdisposeです。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ