私は非常に単純なASP.netプロジェクトを書いています。Linq2SqlDataContextを使用してストアドプロシージャにアクセスしています。コンストラクターに新しいDataContextを作成し、disposeに破棄するIDisposableクラスがあります。
可能な限り、次の内部でリクエストをグループ化します。
using(var dc = new MyDataAccessClass())
{
//All the data requests in here
}
// Do stuff with the data here
したがって、コード全体でこれらのかなりの数が主にUserControlsにあり、開始ページ(またはマスターページ)のPageLoadで単一のDataAccessクラスを作成し、それをSessionに格納することが理にかなっているのではないかと考えていました。メモリ、およびすべてのUserControlsなどで参照し、PreRenderステージで破棄します。
これが私の質問です、これは悪い考えですか?例外やデバッグによってPreRenderの実行が停止するため、これにはデータベースへのいくつかのぶら下がっている接続が含まれると思います。たぶん、MasterPageのLoadをチェックして、そのセッション変数に何かがあるかどうかを確認し、ある場合はそれを破棄すると、ソートされます。
または、DBAがキーボードであなたを攻撃することなく、ページのライフサイクル全体でDataContextを共有するためのよりスマートな方法はありますか?