如何解决未能将数据更新到数据库中
我不明白为什么会发生这个错误。我的程序是这样的:-我将许多数据收集到数据库中,并且还列出了会话数据的类型。其中“会话”数据 ID 类似于我的数据库数据 ID,在那里我使用功能更改数量。但是当我循环的最后一次计数更改我的数量属性时(我调试了那个),然后我发现了这个错误。
这是我的代码:
public async Task<IActionResult> Checkout(Order11 anorder)
{
List<Shop> shop = HttpContext.Session.Get<List<Shop>>("shop");
for (int i = 0; i < shop.Count; i++)
{
// var r = shop[i].Id;
if (_db.Shop.Any(x => x.Id == shop[i].Id))
{
var t = _db.Shop.Where(x => x.Id == shop[i].Id).ToList();
if (t[i].Quantity > 0)
{
t[i].Quantity = (t[i].Quantity - shop[i].Quantity)
}
_db.SaveChanges();
}
}
// other code
}
这是我的输出:
我不明白这个问题的解决方案是什么。我是初学者。请帮忙。
解决方法
想想这里发生了什么:
var t = _db.Shop.Where(x => x.Id == shop[i].Id).ToList();
假设您的 ID 是唯一的,这将导致只有一个项目,但会将其作为列表的唯一成员返回。
因此您不想使用 t
索引到 t[i]
。您只希望 t[0]
获得唯一的元素。
然而,整个事情可以变得更整洁:
for (int i = 0; i < shop.Count; i++)
{
// Single() returns null for no match,the object for a single match
// and throws an exception for multiple matches
var t = _db.Shop.Single(x => x.Id == shop[i].Id);
// ?. first checks if t is null,and only then looks at Quantity
// if t is not null (i.e. Single() has returned a match)
if (t?.Quantity > 0)
{
t.Quantity = (t.Quantity - shop[i].Quantity);
_db.SaveChanges();
}
}
(单独的问题,但我不确定您是否需要在循环内调用 _db.SaveChanges()
。为什么不只在最后调用一次?
t
是筛选后的店铺列表,所以它的数量小于或等于shop.Count
,你不能使用i
作为t
的索引。
您可以像下面那样更改您的代码。
for (int i = 0; i < shop.Count; i++)
{
if (_db.Shop.Any(x => x.Id == shop[i].Id))
{
var t = _db.Shop.Where(x => x.Id == shop[i].Id).ToList();
foreach (var x in t)
{
if (x.Quantity > 0)
{
x.Quantity = (x.Quantity - shop[i].Quantity);
}
}
_db.SaveChanges();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。