0

私はMVC3を使用しており、現在、コントローラーごとにDBコンテナーのインスタンスを1つ宣言するという慣習に従っています。そのコントローラーに来るすべてのリクエストにそのコンテナーインスタンスを使用します。クエリまたはsthのためにモデルに移動する必要がある場合は、そのインスタンスをパラメーターとしてモデルの関数に送信します。したがって、アプリケーション全体で、DB Containerクラスの4〜5個の異なるインスタンスを作成して使用します。私の質問は、これは私のデータベース操作に良い影響を与えるのか、それとも悪い影響を与えるのかということです。個別のコンテナインスタンスを作成することは重要ですか?コンテナクラスを使用する適切な方法は何ですか?

前述のクラスは以前はDBContextと呼ばれていたと思います。

4

1 に答える 1

1

それがあなたの言いたいことかどうかはわかりませんが、私がかなり頻繁に行っているアプローチの例を挙げることができます:

DBContext の一種の「ドメイン サービス クラス」を作成します。

public class MyDomainService : IDisposable
{
    private MyDbEntities dbo;
    private bool isDisposed;

    public MyDomainService()
    {
        dbo = new MyDbEntities();
    }

    public User GetUser(string userName)
    {
        return (from usr in dbo.Users
                where usr.UserName == userName
                select usr).SingleOrDefault();
    }

    public void Dispose()
    {
        if (isDisposed)
            return;
        isDisposed = true;
        dbo.Dispose();
    }
}

andメソッドを拡張ControllerまたはAsyncController オーバーライドするカスタム Controller クラスを作成します。InitializeDispose

public class MyController : Controller
{

    protected MyDomainService DomainService { get; private set; }

    protected override void Initialize(System.Web.Routing.RequestContext
                                       requestContext)
    {
        base.Initialize(requestContext);
        DomainService = new MyDomainService();
    }

    protected override void Dispose(bool disposing)
    {
        DomainService.Dispose();
        base.Dispose(disposing);
    }

}

HomeControllerこれで、継承の例ごとに次のアプローチを使用できますMyController

public class HomeController : MyController
{

    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(string username)
    {
        var user = DomainService.GetUser(username);
        if (user != null)
            return RedirectToAction("Account", "Information");
        return View();
    }

}

これにより、コントローラーがきれいに保たれます。

于 2012-10-19T22:51:15.843 に答える