0

これら2つのアプローチのようなコンテキストを使用することの違いは何ですか

public class MyController : Controller
{
    MyContext db = new MyContext();

    public ActionResult Index()
    {
        return View(db.Users.First(m => m.Id == 1));
    }
    // ...
}

また

public class MyController : Controller
{
    public ActionResult Index()
    {
        using (MyContext db = new MyContext())
        {
            return View(db.Users.First(m => m.Id == 1));
        }
    }
    // ...
}
4

2 に答える 2

3

最初に、コンテキストはクラス全体で利用できます。また、最初の使用後に適切に破棄されることもありません (少なくとも、提供されたコードのコンテキストでは)。

2 番目の例では、コンテキストがusingブロック内でインスタンス化されます。ブロックの後、コンテキストは適切に破棄されます。

于 2013-06-21T17:59:04.667 に答える
1

参考までに、コントローラー レベルで作成されたときに db コンテキストを破棄する方法は次のとおりです。

public class MyController : Controller
{
    MyContext db = new MyContext();

    public ActionResult Index()
    {
        return View(db.Users.First(m => m.Id == 1));
    }
    // ...

    // This is automatically called by the framework, after
    // the ActionResult.ExecuteResult() is called.
    protected override void Dispose(bool disposing)
    {
        if (disposing && db != null)
        {
            db.Dispose();
        }

        base.Dispose(disposing);
    }
}

ビューが実行された後、コントローラーの Dispose メソッドが呼び出されます。これにより、ビュー内の遅延プロパティ (IQueryables、遅延読み込みプロパティ) を呼び出すことができます。アクション内で dbcontext を破棄しても、それは許可されません (2 番目の例)。2 番目の例では、遅延アクションへの参照によって例外が発生します。

于 2013-06-21T18:17:34.910 に答える