【问题标题】:update row by row of a table using for loop in c#在c#中使用for循环逐行更新表
【发布时间】:2016-03-13 00:40:17
【问题描述】:

我想更新/编辑详细信息,然后将这些详细信息逐行保存到表格中。为此,我刚刚创建了以下 Linq 查询

AB_Product_vs_Field insertproductvalue = new AB_Product_vs_Field();

for (int i = 0; i < product.ListProductFields.Count; i++)
{
   insertproductvalue.Product_ID = product.Product_ID;
   insertproductvalue.Field_ID = product.ListProductFields[i].Field_ID;
   insertproductvalue.Field_Value_EN = product.ListProductFields[i].Field_Value_EN;
   insertproductvalue.Field_Value_AR = product.ListProductFields[i].Field_Value_AR;

   db.Entry(insertproductvalue).State = System.Data.Entity.EntityState.Modified;
   db.SaveChanges();
};

然后我收到以下错误

属性“Field_ID”是对象的关键信息的一部分,并且 无法修改。

【问题讨论】:

  • 你需要在循环中初始化一个AB_Product_vs_Field的新实例。
  • @StephenMuecke 怎么做
  • teo van kot 刚刚发布了正确答案
  • @StephenMuecke 我能知道这样做的原因吗
  • 您当前正在初始化您的AB_Product_vs_Field 的一个实例。在第一个循环中,您设置其 ID 并将其添加到您的数据库上下文(db.Entry() 行)。在以下迭代中,您修改了同一实例的 ID,但现在正在跟踪该实例。一旦将 ID 添加到上下文中,您将无法更改它

标签: c# asp.net-mvc linq asp.net-mvc-5


【解决方案1】:

正如斯蒂芬·穆克莱所说:

for (int i = 0; i < product.ListProductFields.Count; i++)
{
   AB_Product_vs_Field insertproductvalue = new AB_Product_vs_Field();
   insertproductvalue.Product_ID = product.Product_ID;
   insertproductvalue.Field_ID = product.ListProductFields[i].Field_ID;
   insertproductvalue.Field_Value_EN = product.ListProductFields[i].Field_Value_EN;
   insertproductvalue.Field_Value_AR = product.ListProductFields[i].Field_Value_AR;
   db.Entry(insertproductvalue).State = System.Data.Entity.EntityState.Modified;

};
db.SaveChanges();

您还应该注意到我将SaveChanges 移到了循环之外。这样做会更好,因为所有更改都会立即提交或不提交(如果您有错误)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多