我在尝试使用ASP.NET更新MVC 5中的AspNetUsers数据库时遇到问题。
我正在尝试更改用户Credits中的值,该值存储在定义为Models.UserDB2.AspNetUsers
的数据库中。
然而,当我尝试这个时,我会抛出这个错误。
EntityFramework.SqlServer.dll中出现'System.Data.Entity.Core.EntityException'类型的第一次机会异常 致命错误:在提供程序连接上启动事务时发生错误。有关详细信息,请参阅内部异常。
内部异常:
EntityFramework.SqlServer.dll中出现'System.Data.Entity.Core.EntityException'类型的第一次机会异常是内部异常
这是导致错误的代码。
if(player != null) {
foreach(Models.Item item in itemDB.Items) {
if(item.UserAssetOptionId == id) {
if(!item.Owner.ToLower().Equals(username.ToLower())) {
return Content("false");
} else {
item.Owner = "HomeguardDev";
item.InMarket = true;
player.Credits += item.Value / 10;
try {
itemDB.SaveChanges();
userDB2.SaveChanges();
return Content("true");
} catch(Exception e) {
Debug.WriteLine("FATAL ERROR: " + e.Message);
return Content("false");
}
}
}
}
}
如果我只更新itemDB
数据库,数据库会更新,但我也需要更新Credits值!
使用数据库的最新模式更新模型,因此没有问题。
任何人都知道发生了什么事?
答案 0 :(得分:1)
问题是,当您仍在迭代itemDB
时,您尝试将更改保存到itemDB.Items
,尝试将代码更改为:
if (player != null) {
foreach(Models.Item item in itemDB.Items) {
if (item.UserAssetOptionId == id) {
if (!item.Owner.ToLower().Equals(username.ToLower())) {
return Content("false");
} else {
item.Owner = "HomeguardDev";
item.InMarket = true;
player.Credits += item.Value / 10;
break;
}
}
}
try {
itemDB.SaveChanges();
userDB2.SaveChanges();
return Content("true");
} catch (Exception e) {
Debug.WriteLine("FATAL ERROR: " + e.Message);
return Content("false");
}
}
只要您在foreach
,就无法开始第二次交易。