gpt4 book ai didi

c# - 为什么我的 ASP.NET MVC 3 with EF 应用程序只有在我调试时单步执行时才有效?

转载 作者:行者123 更新时间:2023-11-30 22:20:33 27 4
gpt4 key购买 nike

我有一个 Controller ,它使用 Entity Framework 更新数据库中的值。不幸的是,当我运行我的应用程序时,它似乎根本不起作用。当我放置断点并单步执行代码的特定部分时,它可以完美运行。

这是我的 Controller 代码:

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();
}
}

我感觉这是我将新团队分配到现有环境的方式,但从我读过的所有教程来看,这是他们这样做的方式,至少对于字符串值而言。有人知道我为什么会出现这种奇怪的行为吗?

*更新*已解决

我解决了我的问题。我的直觉是正确的,我只需要在将新的玩家组分配给现有团队之前添加 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() 方法后,一切都运行良好。

最佳答案

看来其他人也遇到过和你一样的问题。查看这些链接:C# code only gives expected results on step through? , Code runs correctly only when stepping through it with debugger?

因此,如果您多次实例化 Random 类,您会得到一些奇怪的结果。

编辑:

从您的代码来看,您似乎正在使用异常。您能否注释掉 try-catch 并在不调试的情况下运行它,看看它是否抛出任何异常?

关于c# - 为什么我的 ASP.NET MVC 3 with EF 应用程序只有在我调试时单步执行时才有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14917055/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com