2013-02-28 29 views
0

我想通过单个提交将数据插入几张表中。 问题是2表应该是几个项目(烹饪步骤,食谱配料) 这2个表中的项目#是未知的,所以我会使用相同的ajax或任何脚本库。但问题是,在插入到数据库(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); 
} 
+0

我不明白...因为你可以使用一个foreach来运行实体数组,并添加上下文和db.SaveChanges只是在完成 – MayogaX 2013-02-28 11:22:17

+0

因为它是现在我有这个Erorr味精。'System.Data.Entity.DbSetXXX.Models.intrusion> .AddXXX.Models.intrusion'的最佳重载方法匹配')有一些无效参数 – Danny 2013-02-28 11:56:27

回答

0

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

如果你真的要添加多个入侵对象,你实际上应该做一个foreach循环,阵列上进行如下:

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

那至于你在自己的评论中提到的错误去。至于一对多问题(,您对的描述不太清楚),请确保“many”实体上的导航属性指向“one”实体,并确保“一个”实体上的“多”实体将该参考添加到“多”实体。英孚在此时应该照顾其余的人。

让我知道是否有什么我错过了。

+0

哎呀,忘记了索引。 – IronMan84 2013-02-28 15:10:49

+0

谢谢你的帮助。 我有一个diff错误, 不能隐式地将类型'XXX.Models.intrusion'转换为'int' 为什么它是一个int? – Danny 2013-02-28 15:47:22

+0

已编辑。请看一下。 – IronMan84 2013-02-28 15:49:17

相关问题