データベースは、コントローラーの基本クラスになります。この基本クラスはControllerを拡張する必要があり、すべてのコントローラーは基本クラスを拡張する必要があります。ここに小さな例があります:
public class BaseController : Controller
{
private AuthServices _auth;
private LogHelper _log;
private Repository _repository;
/// <summary>
/// <see cref="AuthServices"/>
/// </summary>
protected AuthServices Authorization
{
get { return _auth ?? (_auth = new AuthServices()); }
}
/// <summary>
/// <see cref="LogHelper"/>
/// </summary>
protected LogHelper Log
{
get { return _log ?? (_log = new LogHelper()); }
}
/// <summary>
/// <see cref="Repository"/>
/// </summary>
protected Repository Repository
{
get { return _repository ?? (_repository = new Repository()); }
}
}
怠惰なインスタンス化に注意してください。これにより、テストを実行する前に忍び込み、プライベートフィールドにモックを設定することができます。
セッションに関しては、従来のASP.NETアプリケーションと同様に、ユーザーオブジェクトをセッションに保存できます。ほとんどすべて(Response、Cache、Sessionなど)がまだ存在しますが、テスト用にモックできるように、それらの一部はSystem.Web.Abstractionsのクラスでラップされています。これらはすべて同じように動作しますが、従来の役割でそれらの一部を使用するべきではありません(たとえば、Response.Redirectを実行せず、リダイレクトを実行するRedirectToRouteResultなどのActionResultを返します)。
あなたの質問の背後にある理由については....
単一のデータベース接続にストレスをかけないでください。実装によっては、リクエストが相互にステップする可能性があるため、それは悪い考えでさえあるかもしれません。接続を開いて使用し、完了したら破棄/閉じます。
また、MVCがもたらす最大の変更の1つは、従来のASP.NETがWeb開発に持ち込もうとしたステートフルモデルの拒否です。そのフレームワークとビューステートはすべてもう存在しません(カーテンの後ろの人には注意を払わないでください)。保持する状態が少ないほど、Webアプリケーションの複雑さと堅牢性は低くなります。それを試してみてください、あなたはそれを好きかもしれません。