0

1回の送信でいくつかのテーブルにデータを挿入したいと思います。問題は、テーブルの 2 つがいくつかの項目 (調理手順、レシピの材料) であることです。この 2 つのテーブルの項目数は不明であるため、同じ ajax または任意のスクリプト Lib を使用します。しかし、問題は、データベースへの挿入 (db.add & db.save) にあります。彼の 2 つのテーブルのそれぞれには、1 対多の関係があります (1 つのレシピが多数 ….)

[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()一度に 1 つしか実行できません (これは、エラー メッセージを説明しています。配列全体に入れるのは無効です)。

実際に複数の侵入オブジェクトを追加している場合は、実際にはforeach次のようにその配列でループを実行する必要があります。

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

それは、コメントで言及したエラーに関する限りです。1 対多の問題 (あまり明確ではありません) に関しては、「多」エンティティのナビゲーション プロパティが「1」エンティティを指していることを確認し、「 "one" エンティティに many" エンティティを追加すると、"many" エンティティへの参照が追加されます。その時点で、EF が残りの処理を行う必要があります。

見逃したものがある場合はお知らせください。

于 2013-02-28T14:53:37.547 に答える