2012-04-06 70 views
0

你好的人時遇到了正在以下錯誤的問題:MVC3不能創建新的遊戲

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

,並衝着下面的錯誤:

@Html.DisplayFor(modelItem => item.tblConsole.ConsoleName) "within the game table" 

我有以下代碼在我的遊戲控制器:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using GameTest.Models; 

namespace GameTest.Controllers 
{ 
    public class GameController : Controller 
    { 
     private gamezoneDBEntities db = new gamezoneDBEntities(); 

     // 
     // GET: /Game/ 

     public ViewResult Index() 
     { 
      using (var db = new gamezoneDBEntities()) 
      { 

       var Info = db.tblGames.Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList(); 
       return View(Info); 

      } 

     } 

     // 
     // GET: /Game/Details/5 

     public ViewResult Details(int id) 
     { 
      tblGame tblgame = db.tblGames.Find(id); 
      return View(tblgame); 
     } 

     // 
     // GET: /Game/Create 

     public ActionResult Create() 
     { 
      ViewBag.ConsoleNameIDFK = new SelectList(db.tblConsoles, "ConsoleName", "ConsoleName"); 
      return View(new tblGame { UserName = @User.Identity.Name }); 
     } 

     // 
     // POST: /Game/Create 

     [HttpPost] 
     public ActionResult Create(tblGame tblgame) 
     { 
      if (ModelState.IsValid) 
      { 
       db.tblGames.Add(tblgame); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.ConsoleNameIDFK = new SelectList(db.tblConsoles, "ConsoleName", "ConsoleName", tblgame.ConsoleNameIDFK); 
      return View(tblgame); 
     } 

     // 
     // GET: /Game/Edit/5 

     public ActionResult Edit(int id) 
     { 
      tblGame tblgame = db.tblGames.Find(id); 
      ViewBag.ConsoleNameIDFK = new SelectList(db.tblConsoles, "ConsoleName", "ConsoleName", tblgame.ConsoleNameIDFK); 
      return View(tblgame); 
     } 

     // 
     // POST: /Game/Edit/5 

     [HttpPost] 
     public ActionResult Edit(tblGame tblgame) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Entry(tblgame).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      ViewBag.ConsoleNameIDFK = new SelectList(db.tblConsoles, "ConsoleName", "ConsoleName", tblgame.ConsoleNameIDFK); 
      return View(tblgame); 
     } 

     // 
     // GET: /Game/Delete/5 

     public ActionResult Delete(int id) 
     { 
      tblGame tblgame = db.tblGames.Find(id); 
      return View(tblgame); 
     } 

     // 
     // POST: /Game/Delete/5 

     [HttpPost, ActionName("Delete")] 
     public ActionResult DeleteConfirmed(int id) 
     {    
      tblGame tblgame = db.tblGames.Find(id); 
      db.tblGames.Remove(tblgame); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

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

我已經使用這個代碼索引所以每場比賽是唯一的誰貼個用戶Ë遊戲:

 var Info = db.tblGames.Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList(); 
     return View(Info); 

,並已在我的控制器的第一個創建部分添加了這個:

return View(new tblGame { UserName = @User.Identity.Name }); 

此代碼的工作,當你不上創建點擊每個用戶都有遊戲的各個崗位但是當我按新建它崩潰

任何幫助,將不勝感激。請詢問您是否需要了解更多

回答

2

您需要Include查詢中的控制檯表數據。

var Info = db.tblGames.Include(x => x.tblConsole).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList(); 
      return View(Info); 

你返回實體正試圖在lazy load額外的數據,但不能因爲數據上下文已被釋放。這是因爲你把它包裝在一個using區塊中。 通過使用Include您是Eager Loading您在初始查詢中需要的所有數據,並且實體不需要進行任何其他查詢即可在視圖中獲取您請求的數據。

您可以在EagerLazy裝載在這裏閱讀更多:http://msdn.microsoft.com/en-us/library/bb896272.aspx

而且,沒有理由有gamezoneDBEntities的私有實例:

private gamezoneDBEntities db = new gamezoneDBEntities() 

只需使用你的using創建實例塊:

using (var db = new gamezoneDBEntities()) 
+0

謝謝你會嘗試,這是假設(x => x.tblConsole)? – user1137472 2012-04-06 14:47:13

+1

'Include'還將從查詢中的數據庫中選擇tblConsole數據。這將使您可以訪問頁面上需要的所有數據,而無需EF進行額外查詢並需要DbContext。 – Paul 2012-04-06 14:51:09

+0

謝謝工作:) x – user1137472 2012-04-06 14:52:52