2013-04-01 4 views
0

Мне нужно иметь возможность сохранять одну и ту же модель несколько раз с помощью цикла for. Мое действие имеет два параметра: InventoryViewModel movie и количество int. Если, например, количество равно 3, мне нужно сохранить три копии в базе данных.MVC3 Сохранить модель несколько раз

В моем контроллере у меня есть:

[HttpPost] 
    public ActionResult addInventory(InventoryViewModel movie, int Quantity) 
    { 
     movie.Inventory.isAvail = true; 
     if (ModelState.IsValid) 
     { 
      for (int i = 0; i < Quantity; i++) 
      { 
       inventoryRepository.save(movie.Inventory); 
       movie = new InventoryViewModel(); 
      } 
      return RedirectToAction("index"); 
     } 
     return View("index", movie); 
    } 

Я думал, установив фильм = новый InventoryViewModel создаст новый экземпляр фильма, но он не работает. Если я выберу эту строку, она будет удаляться в оператор else после добавления первой копии в базу данных. CheckoutNum является основным ключом таблицы, поэтому я не могу установить его в 0 в цикле for. Я не могу вспомнить точную ошибку, но это не значит, что первичный ключ не может быть изменен.

Repository:

public void save(Inventory movie) 
    { 
     if (movie.CheckoutNum == 0) 
      db.Inventory.Add(movie); 
     else 
      db.Entry<Inventory>(movie).State = System.Data.EntityState.Modified; 

     db.SaveChanges(); 
    } 

ответ

1

Когда вы первый сохранили объект он уже помечен как "не новый". Таким образом, при последующих вызовах он будет делать обновление. Что вы должны сделать, так это создать новый экземпляр Inventory на каждом цикле:

for (int i = 0; i < Quantity; i++) 
{ 
    var entityToSave = new Inventory(); 
    // map the property values to save 

    inventoryRepository.save(entityToSave); 
} 
+0

Это вытирает фильм, когда я это делаю. – Andrew

+0

Вы можете игнорировать предыдущий комментарий, я понимаю, что вы имели в виду сейчас. Я пропустил ваш комментарий. Благодаря! – Andrew

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