繁体   English   中英

如何在ASP.NET MVC中使用实体框架更新/编辑多个记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM