我需要能够使用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();
}
答案 0 :(得分:1)
当您第一次保存实体时,它已被标记为“不是新的”。因此,在成功的呼叫中,它将进行更新。你应该做的是在每个循环上创建一个Inventory
的新实例:
for (int i = 0; i < Quantity; i++)
{
var entityToSave = new Inventory();
// map the property values to save
inventoryRepository.save(entityToSave);
}