0

我需要能够使用 for 循环多次保存同一个模型。我的 Action 有两个参数,InventoryViewModel 电影和 int 数量。如果数量为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();
    }
4

1 回答 1

1

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

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

    inventoryRepository.save(entityToSave);
}
于 2013-04-01T04:08:12.807 回答