2013-02-17 20 views
2

我有一個控制器,使用實體框架更新數據庫中的值。不幸的是,當我運行我的應用程序時,它似乎根本不起作用。當我將斷點放入代碼的特定部分並逐步完成時,它可以很好地工作。爲什麼我的ASP.NET MVC 3與EF應用程序只工作時,我在調試時通過它?

這裏是我的控制器代碼:

public ActionResult ManageGame(int id, FormCollection collection, string[] selectedPlayers) 
    { 
     var gameToUpdate = db.Games 
      .Include("Teams") 
      .Where(g => g.ID == id) 
      .Single(); 

     if (TryUpdateModel(gameToUpdate, "", null, new string[] { "Players" })) 
     { 
      try 
      { 
       List<Player> team1Players = generateRandomTeam(); 
       List<Player> team2Players = generateRandomTeam(); 

如果我把一個斷點在這裏和步通過它的優良的代碼的其餘部分,否則沒有得到保存。

   foreach (var team in gameToUpdate.Teams) 
       { 
        if (!team1added) 
        { 
         team.Players = team1Players; 
         team1added = true; 
        } 
        else 
        { 
         team.Players = team2Players; 
        } 
       } 

       db.Entry(gameToUpdate).State = EntityState.Modified; 
       db.SaveChanges(); 
      } 
      catch (DataException) 
      { 
       ModelState.AddModelError("", "Unable to save changes."); 
      } 
     } 

     try 
     { 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

我有一種感覺這是我指定的新車隊現有上下文的方式,但是從我所讀過的教程,這是他們做到這一點,至少對字符串值。有人知道我爲什麼會得到這種奇怪的行爲嗎?

* UPDATE *解決

我解決我的問題。我的直覺是對的,我只需要在將新隊員分配給現有隊伍之前添加team.Players.Clear()。

foreach (var team in gameToUpdate.Teams) 
{ 
    if (!team1added) 
    { 
     team.Players.Clear() 
     team.Players = team1Players; 
     team1added = true; 
    } 
    else 
    { 
     team.Players.Clear() 
     team.Players = team2Players; 
    } 
} 

當我沒有這個,我有一個主鍵違例異常。不幸的是我沒有看到這個例外,因爲我的代碼吞噬了DarK​​指出的這個。所以,在添加Clear()方法之後,所有的工作都像魅力一樣。

+0

你有沒有檢查你的連接字符串? – BizApps 2013-02-17 01:26:24

+0

是的,我的連接字符串很好。就像我說的那樣,當我在調試時通過它時,它會更新正常。如果我只是運行它,沒有調試它不起作用。 – user2056006 2013-02-17 01:28:32

+0

嘗試使用thread.sleep(1000)之前,並刪除您的breakpoint.i認爲您可能有計時和鎖定問題。 – pylover 2013-02-17 01:40:37

回答

3

看起來像其他人有像你一樣的問題。在這些鏈接:C# code only gives expected results on step through?,Code runs correctly only when stepping through it with debugger?

所以,如果你實例化Random類不止一次,你會得到一些奇怪的結果。

編輯:

從你的代碼,它看起來像你消耗例外。你可能會註釋掉try-catch,並在沒有調試的情況下運行它,看看它是否會拋出任何異常?

+0

我正在使用Random的兩個實例並將其替換爲一個,但我仍然遇到同樣的問題。 – user2056006 2013-02-17 02:17:06

+0

你實例化了多少次? – DarK 2013-02-17 02:20:18

+0

只需一次。然後我將它傳遞給其他方法,並使用隨機名稱。 – user2056006 2013-02-17 02:23:25

相關問題