为什么我的ASP.NET MVC 3与EF应用程序只有当我在调试时逐步通过它时才能工作
本文关键字:调试 工作 MVC NET ASP 我的 应用程序 EF 为什么 | 更新日期: 2023-09-27 17:59:47
我有一个控制器,它使用实体框架更新数据库中的值。不幸的是,当我运行应用程序时,它似乎根本不起作用。当我在代码的特定部分设置断点并逐步执行时,它可以完美地工作。
这是我的控制器代码:
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();
}
}
我有一种感觉,这是我将新团队分配给现有上下文的方式,但从我读过的所有教程来看,这是他们这样做的方式,至少对于字符串值是这样。有人知道我为什么会有这种奇怪的行为吗?
*更新*已解决
我解决了我的问题。我的直觉是对的,我只需要增加团队。玩家。在将新玩家组分配给现有团队之前清除()。
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()方法之后,一切都像一个符咒。
看起来其他人也遇到过和你一样的问题。看看这些链接:C#代码只给出了步骤通过的预期结果?,代码只有在使用调试器逐步执行时才能正确运行?
因此,如果您多次实例化Random类,您将得到一些奇怪的结果。
编辑:
从您的代码来看,您似乎正在使用异常。您是否可以注释掉try-catch并在不进行调试的情况下运行它,看看它是否抛出任何异常?