質問: 多分その愚かな質問ですが、私は自分自身を混乱させました。私はAutofac(DI)でDapperを使用しています。私のビジネス層では、常に次のような構成を使用しています。 ``` db.Open(); //db is IDbConnection instance db.InsertOrDeleteOrUpdate(...) db.Close(); ``` デリゲートメソッドでdb.Open()とdb.Close()を隠す良いソリューションかどうか?例えば: ``` dbHelper.do(db => db.InsertOrDeleteOrUpdate(...)); ``` そのような場合はどうしますか?
回答: このコードでは、冗長コードだけが問題ではありません。あなたのコードはすべてのアクションのためにデータベースに当たっています。 DBServerがリモートマシンにデプロイされている場合、これはパフォーマンスに影響します。 この答えを参照してください。 あなたはUnitOfWorkのパターンを見つけたことがありますか?これは、いくつかのより高いレベルで接続を処理するための非常に良い解決策です。 Connection Factoryはもう一つの良い選択肢であり、UnitOfWorkで使用できます。しかし私は個人的にはUnitOfWorkだけを好む。 UnitOfWorkのサンプルコードはこの答えを参照してください。 上記から選択すると、「リクエストごとの接続」パターンを使用することで冗長性を減らすのは簡単です。コード内で`DalSession`を作成する場所とその場所を特定する必要があります。