2015-12-07 5 views
-1

Я хочу обновить сразу несколько записей в таблице.Обновление нескольких строк в таблице сразу с использованием linq

Так что я таблица, как показано ниже

enter image description here

погрузкой 30 редактора как Field_Value_EN и Field_Value_AR на одну Product_ID

как ниже

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 записи, ее необходимо обновить все строки relavant к 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; линия

Тип объекта Список `1 не является частью модели для текущего контекста .


EDIT

тогда я изменил 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). Объекты могут быть изменены или удалены с момента загрузки объектов.

+0

я думаю db.Entry ожидает один объект не список – MstfAsan

+0

так, то как преобразовать это в список – kez

+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(); 
+0

, тогда я получаю следующую ошибку: «Поле ключа« Product_ID »не может иметь значение null. Для полей ключа, определенных в типе« AB_Product_vs_Field », требуется ненулевое значение. – kez

+0

Это означает, что значение 'product.Product_ID' равно' null'. Когда вы передаете модель продукта методу редактирования, вы должны предоставить идентификатор продукта, который вы хотите изменить. –

+0

yes Я передаю, в настоящее время его жестко закодированный в методе GET как Product_ID = «01»; – kez

Смежные вопросы