【问题标题】:SaveChanges throws System.Data.Entity.Core.EntityExceptionSaveChanges 抛出 System.Data.Entity.Core.EntityException
【发布时间】:2015-08-14 03:28:54
【问题描述】:

我在尝试使用 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 值!

模型已使用数据库的最新架构进行更新,因此没有问题。

有人知道怎么回事吗?

【问题讨论】:

  • 请发布内部异常详细信息。
  • EntityFramework.SqlServer.dll 中发生的“System.Data.Entity.Core.EntityException”类型的第一次机会异常是内部异常
  • 我认为在迭代 itemDB.Items 时不能调用 itemDB.SaveChanges();。在foreach之后尝试保存
  • 它在保存更改后以返回结束迭代,这应该不是问题。
  • 还在foreach,表示事务还在忙。

标签: c# asp.net-mvc entity-framework


【解决方案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,你就不能开始第二次交易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2021-11-15
    • 2014-01-24
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多