2013-04-01 67 views
0

我需要能够使用for循环多次保存同一模型。我的操作有两个参数,InventoryViewModel电影和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是表的主键,因此我无法在for循环中将其设置为0。我不记得确切的错误,但它是关于主键不能修改的东西。

库:

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

当我这样做时,会清除movieId。 – Andrew

+0

你可以忽略之前的评论,我明白你的意思了。我错过了你的评论。谢谢! – Andrew