[英]How to Update/Edit multiple records using Entity Framework in ASP.NET MVC
我需要更新多条记录,这是我能得到的距离
首先,我尝试了
foreach (var Product in Products)
{
Product.Price = Price;
db.Entry(Product).State = EntityState.Modified;
db.SaveChanges();
}
但是,我收到此错误
存储更新,插入或删除语句影响了意外的行数(0)。 自加载实体以来,实体可能已被修改或删除。 刷新ObjectStateManager条目。
然后,我找到了这个答案,说我应该为每次迭代创建新的实例,但是我遇到了相同的错误。 以下是我的尝试。
foreach (var Product in Products)
{
var ProductInLoop = new Product();
ProductInLoop.Price = Product.Price;
db.Entry(ProductInLoop).State = EntityState.Modified;
db.SaveChanges();
}
我也不能这样做db.Entry(Products).State = EntityState.Modified;
在循环外,因为Entry()
需要一个singel对象。
我该如何解决?
感谢本·罗宾逊的评论,我解决了这个问题。 造成问题的原因是我没有将主键从View传递到Controller 。
在View中,我添加了此隐藏字段以传递主键,如下所示:
<input type="hidden" name="[@i].id" value="@Product.id" />
和服务器端代码如下所示
foreach (var product in Products)
{
product.Price = Price;
db.Entry(product).State = EntityState.Modified;
}
db.SaveChanges();
无需创建新的Product对象。 由于您正在修改记录,因此您的Products集合可能已经附加到数据库上下文中,并且如果您对其进行修改,则会跟踪其状态。
尝试这个:
foreach (var Product in Products)
{
Product.price = ProductSize.price;
db.SaveChanges();
}
如果产品未附加到上下文(db),请在保存之前添加以下行:
db.Products.Attach(Product);
按照惯例,您还应该将循环变量从Prodcut更改为小写形式:product
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.