我有一個控制器,使用實體框架更新數據庫中的值。不幸的是,當我運行我的應用程序時,它似乎根本不起作用。當我將斷點放入代碼的特定部分並逐步完成時,它可以很好地工作。爲什麼我的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()方法之後,所有的工作都像魅力一樣。
你有沒有檢查你的連接字符串? – BizApps 2013-02-17 01:26:24
是的,我的連接字符串很好。就像我說的那樣,當我在調試時通過它時,它會更新正常。如果我只是運行它,沒有調試它不起作用。 – user2056006 2013-02-17 01:28:32
嘗試使用thread.sleep(1000)之前,並刪除您的breakpoint.i認爲您可能有計時和鎖定問題。 – pylover 2013-02-17 01:40:37