0

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

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

1 回答 1

0

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

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

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

就您在评论中提到的错误而言。至于一对多的问题(你不是很清楚),确保“多”实体上的导航属性指向“一”实体,并确保“ “一个”实体上的“许多”实体添加了对“许多”实体的引用。EF 应该在这一点上处理其余的事情。

如果有什么我错过的,请告诉我。

于 2013-02-28T14:53:37.547 回答