MVC3多次保存模型

时间:2013-04-01 04:03:37

标签: asp.net-mvc-3 entity-framework

我需要能够使用for循环多次保存相同的模型。我的Action有两个参数,InventoryViewModel movie和int quantity。例如,如果数量为3,我需要将三个副本保存到数据库中。

在我的控制器中我有:

[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);
    }

我认为设置movie = new 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 个答案:

答案 0 :(得分:1)

当您第一次保存实体时,它已被标记为“不是新的”。因此,在成功的呼叫中,它将进行更新。你应该做的是在每个循环上创建一个Inventory的新实例:

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

    inventoryRepository.save(entityToSave);
}