如何在包含数组的多提交表单中插入项目

时间:2013-02-28 11:14:08

标签: asp.net-mvc entity-framework

我想通过一次提交将数据插入到几个表中。 问题是表中的2应该是几个项目(烹饪步骤,配方的成分) 这2个表中的项目数是未知的,所以我将使用相同的ajax或任何脚本Lib。但问题是插入db(db.add& db.save) 他的两张桌子中的每一张都有一对多的关系(一个配方很多......)。

[HttpPost]
public ActionResult Create(Recipe recipe, Category category, Ingredient ingredient ,  intrusion [] intrusion )
{

  int UserNumber = (int)Membership.GetUser().ProviderUserKey;
  recipe.UserId = UserNumber;
  recipe.AddedDate = DateTime.Now;
  //intrusion  intrusion [] =new List<intrusion>  ;

  //var entity=new intrusion();
  //TryUpdateModel(entity ,new[] {"intrusion.IntrusionStep","intrusionId"});

  if (ModelState.IsValid)
  {
  //   var results = db.intrusion.Add(entity);
    db.category.Add(category);
    db.recipe.Add(recipe);
    db.ingerdient.Add(ingredient);
    db.intrusion.Add(intrusion);
    db.SaveChanges();

    return RedirectToAction("Index");
  }

  return View(recipe);
}

1 个答案:

答案 0 :(得分:0)

您收到该错误是因为您传递了一组intrusion条记录,但仍尝试使用db.intrusion.Add(intrusion);添加它们。你不能这样做。 .Add()只允许您一次执行一个(这解释了您的错误消息 - 放入整个数组无效)。

如果您实际上是在添加多个入侵对象,那么您应该在该数组上执行foreach循环,如下所示:

foreach(var i in intrusion)
{
  db.intrusion.Add(i);
}

就你在评论中提到的错误而言。至于一对多的问题(你还不是很清楚),请确保“many”实体上的导航属性指向“one”实体,并制作确保“one”实体上的“many”实体的集合添加了对“many”实体的引用。 EF应该在那时照顾其余部分。

让我知道是否有一些我错过的东西。