3

Application_BeginRequest で dbContext をインスタンス化し、Application_EndRequest で破棄する Entity Framework 4.1 で新しい MVC3 プロジェクトを実装しようとしています。

 protected virtual void Application_BeginRequest()
    {
        HttpContext.Current.Items["_EntityContext"] = new EntityContext();
    }

    protected virtual void Application_EndRequest()
    {
        var entityContext = HttpContext.Current.Items["_EntityContext"] as EntityContext;
        if (entityContext != null)
            entityContext.Dispose();
    }

EntityContext クラスは次のように定義されます。

 public class EntityContext : MyEntities, IDisposable
{
    **//should this be static?**
    public static EntityContext Current
    {
        get { return HttpContext.Current.Items["_EntityContext"] as EntityContext; }
    }



    void IDisposable.Dispose()
    {
        Current.Dispose();
    }

私の質問は、現在のプロパティを静的として定義すると、マルチユーザー シナリオで問題が発生しますか?

4

2 に答える 2

0

instaが指摘したように、実際にコンテキストをインスタンス化する必要がありますneed。コンテキストの寿命をそれほど長くすることに利点はありません。

補足として、Dispose.NETガベージコレクターがより効率的にメソッドを呼び出すため、メソッドを明示的に呼び出す必要はありません。

MVCを使用しているため、クラスごとにコンテキストをインスタンス化できます。コントローラーごとに1回コンテキストをインスタンス化します。

public class MyTableObjectController : Controller
{
    MyContext context = new MyContext();

    public ActionResult Index()
    {
        var model = context.MyTableObjects;

        return View(model);
    }
}

開始リクエストと終了リクエストの間でコンテキストを利用できるようにしようとしているのはなぜですか?インスタンス化を回避しようとしていますか?

于 2012-04-09T23:48:15.663 に答える
0

DbContext の寿命が長すぎます。要求ごとに最低でも 1 つ、さらにはデータベースへのアクセスごとに 1 つスピンアップする必要があります。

于 2012-04-09T22:56:57.017 に答える