なぜDapperはネットを開いたり閉じたりしないのですか?

.net connection-pooling dapper sqlconnection

質問

Dapperは、接続が使用されているときに暗黙的に接続が開かれることを期待しています。なぜそれはそれを開いたり閉じたりしないのですか?これは単に接続管理ですか?

私は共同作業者であり、接続プーリングを使用して背後にあるものの性質について往復していて、複数のコマンド間で接続を開いたり、接続を開いたり閉じたりすることに何らかの利点がある場合各コマンドについて。

受け入れられた回答

Dapperはこれを内部的に扱います(かなりの時間)。それはちょうどworksâ "¢


元の(古い)回答:

あなたは間違っていません。私がこの不便さに気付かなかった理由は、従来の理由(具体的にはLINQ-to-SQLのみを使用していました)の主な接続のようなものがDataContextなので、dapperメソッドを拡張メソッドとして再公開しますDataContext

愚かなことです:これらの方法は何ですか:

using(db.Connection.EnsureOpen()) {
    db.Connection.{the dapper method}
}

ここでEnsureOpenは、次のようなすばらしいメソッドです。

  • 接続が開いている場合はnullを返します。
  • それ以外の場合は、接続を開き、完了したら接続を閉じるIDisposableトークンを返します

だから私たちは明らかあなたの痛みを正確に感じましたが、私たちはそれをさらに上に実装しました。

機能リクエストとしてこれを記録してください。私すべてのコードを用意しています(バッファされていないデータの "リーダー"に合わせるために少し修正する必要があります)。これはdapperが所有権を取ることはできません。


人気のある回答

私はここで反対の答えを加えなければなりません。あるいは、特定の状況でのみDapperが接続を別々に扱うかもしれないことを少なくとも示唆しています。私はDapper.SqlMapperをちょうど反映し、ExecuteCommandメソッド(public api上でExecuteCommandメソッドに呼び出されます)にチェックがあり、接続が閉じられていないかどうかを確認します。

私は、私の同僚のコードレビューが明示的にconnection.openを呼んでいないことを強調したので、DBにdapperを呼び出す前にそれを見ています。私の統合テストがすべて緑色だったので、これは選択されていませんでした。実行時にすべてが大変でした。だから私たちはDapperのコードに飛び込んだ。断言のために公開を呼び出す方が良いと主張することもできるが、反対に、より少ないコードほど良いと主張する人もいるかもしれない。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow