現在、ASP.NET MVCアプリケーションを学習しています。基本的に私はレストランレビューと呼ばれるEFでMVC 4アプリを作成しました。しかし、新しいレビューを作成すると、エラーが表示されます。私はそれが私が逃したものでなければならないことを知っているINSERTステートメントがFOREIGN KEY制約と競合しました
エラーがFOREIGN KEY制約 "FK_dbo.ResturantReviews_dbo.Resturants_Resturant_Id" と競合
INSERT文です。競合は、データベース "OdeToFoodDb"、テーブル "dbo.Resturants"、列 'Id'で発生しました。 この声明は終了しました。**
以下は私の階層を示しています。
モデル
public class Resturant
{
public int Id { get; set; }
public string Name { get; set; }
public string City { get; set; }
public string Country { get; set; }
public virtual ICollection<ResturantReview> Reviews { get; set; }
}
public class ResturantReview
{
public int Id { get; set; }
public int Rating { get; set; }
public string Body { get; set; }
public string ReviewerName { get; set; }
public int ResturantId { get; set; }
}
コントローラ
public class ReviewsController : Controller
{
private readonly OdeToFoodDb _db = new OdeToFoodDb();
public ActionResult Index([Bind(Prefix = "id")]int restaurantId)
{
var restaurant = _db.Resturants.Find(restaurantId);
if (restaurant != null)
{
return View(restaurant);
}
return HttpNotFound();
}
[HttpGet]
public ActionResult Create(int restaurantId)
{
return View();
}
[HttpPost]
public ActionResult Create(ResturantReview review)
{
if (ModelState.IsValid)
{
_db.Reviews.Add(review);
_db.SaveChanges();
return RedirectToAction("Index", new { id = review.ResturantId });
}
return View(review);
}
ビュー
@model OdeToFood.Models.Resturant
@{
ViewBag.Title = "Index";
}
<h2>Review For @Model.Name</h2>
@Html.Partial("_Reviews", Model.Reviews)
<p>
@Html.ActionLink("Create New", "Create", new {restaurantId = Model.Id})
</p>
存在しないレストランでレビューを作成しようとしているようです。 – DrewJordan
あなたの 'Create'メソッドをデバッグして' review.RestaurantId'に有効な識別子が含まれていることを確認しましたか? –
あなたの 'Create()' GETメソッドは 'restaurantId'の値をビューに渡さないので、フォームを送信すると' review.ResturantId'の値は '0'なので、エラーになります。また、データモデルではなく、ビュー内でビューモデルを使用してください。 –