使用linq一次更新表中的多行

时间:2015-12-07 08:03:44

标签: c# asp.net-mvc linq asp.net-mvc-4 razor

我想一次更新表格中的少数记录。

所以我有下面的表格

enter image description here

Field_Value_ENField_Value_ARProduct_ID加载30个编辑器

如下所示

enter image description here

这些是相关的模型类

AB_Product_vs_Field模型类

public partial class AB_Product_vs_Field
{
    public string Product_ID { get; set; }
    public string Field_ID { get; set; }
    public string Field_Value_EN { get; set; }
    public string Field_Value_AR { get; set; }
}

ProductEdit模型类

public class ProductEdit
{
    public string Product_ID { get; set; }
    public string ProductTypeID { get; set; }
    public string ProductCategoryID { get; set; }
    public string Subsidary_ID { get; set; }
    public string Field_ID { get; set; }
    public string ProductFieldNameEn { get; set; }
    public string ProductFieldNameAr { get; set; }
    public string ApprovalStatus { get; set; }
    public string Status { get; set; }
    public IList<AB_Product_vs_Field> ListProductFields { get; set; }
    public IList<AB_ProductTypeCategoryField> ListProductLables { get; set; }
}

提交详细信息后,我想更新所有相关的行AB_Product_vs_Field表。

例如:假设我更新 Product_ID = 10 记录,它应该更新所有相关的行 Product_ID = 10

所以我创建了这样的linq查询

    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Product_Edit(ProductEdit product)
    {
        AB_Product_vs_Field insertproductvalue = new AB_Product_vs_Field();      
        var user = db.AspNetUsers.Find(User.Identity.GetUserId());


        if (ModelState.IsValid)
        {

            var listInsertproductvalue = new List<AB_Product_vs_Field>(); 

            for (int i = 0; i < product.ListProductFields.Count; i++)
            {
                listInsertproductvalue.Add(new AB_Product_vs_Field
                {
                    Product_ID = product.Product_ID,
                    Field_ID = product.ListProductFields[i].Field_ID,
                    Field_Value_EN = product.ListProductFields[i].Field_Value_EN,
                    Field_Value_AR = product.ListProductFields[i].Field_Value_AR
                }); 

            };

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

但是我在db.Entry(listInsertproductvalue).State = System.Data.Entity.EntityState.Modified;

中遇到了以下错误
  

实体类型List`1不是当前模型的一部分   上下文。

修改

然后我改变了这样的LINQ查询

        AB_Product_vs_Field insertproductvalue = new AB_Product_vs_Field();

        if (ModelState.IsValid)
        {

            for (int i = 0; i < product.ListProductFields.Count; i++)
            {
                insertproductvalue.Field_ID = product.Product_ID;
                insertproductvalue.Product_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();

但随后出现以下错误

  

存储更新,插入或删除语句会影响意外   行数(0)。自那以后,实体可能已被修改或删除   实体已加载。

1 个答案:

答案 0 :(得分:0)

尝试更新圈内的实体

    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Product_Edit(ProductEdit product)
    {
        var user = db.AspNetUsers.Find(User.Identity.GetUserId());

        if (ModelState.IsValid)
        {
            for (int i = 0; i < product.ListProductFields.Count; i++)
            {
                var insertproductvalue = new AB_Product_vs_Field
                {
                    Product_ID = product.Product_ID,
                    Field_ID = product.ListProductFields[i].Field_ID,
                    Field_Value_EN = product.ListProductFields[i].Field_Value_EN,
                    Field_Value_AR = product.ListProductFields[i].Field_Value_AR
                }); 

                // Attach and set to modified
                db.Entry(insertproductvalue).State = System.Data.Entity.EntityState.Modified;
            };

            db.SaveChanges();