我目前正在学习ASP.NET MVC应用程序。基本上我用EF创建了一个名为Restaurant Review的MVC 4应用程序。但是,当我创建新评论时,它会显示错误。我知道这一定是我错过的。
错误是
INSERT语句与FOREIGN KEY约束“FK_dbo.ResturantReviews_dbo.Resturants_Resturant_Id”冲突。冲突发生在数据库“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>
答案 0 :(得分:1)
我认为Id
表的Restaurant
属性不是唯一键或主键。请先检查一下,然后重试。
答案 1 :(得分:0)
我认为餐馆有问题。尝试添加检查是否存在已审核的餐馆。此外,我建议为您的模型添加验证属性,例如[Required]
。
答案 2 :(得分:0)
此问题可能是由实体框架引起的。检查Review实体中是否有Restaurant字段。如果是这样,请在保存Review之前为其指定null(只需将ID保留在RestaurantId字段内)。
在某些情况下,EF认为分离的实体是一个新实体(就像我们在里面找到一个餐厅的评论)并尝试将其添加到数据库中,因为完全相同的实体已经存在而获得异常。如果我们不需要它,我们必须阻止它保存餐厅,所以我们应该保存评论。
此外,正如其他人所说,您可能只是在不存在的餐厅添加评论(不确定是否适合您,我想这种问题很容易被发现)
如果它对您有帮助,请告诉我。
答案 3 :(得分:0)
添加以下属性
public int RestaurantId { get; set; }
在RestaurantReview
模型类中。
和Update-Database -pakage Manager控制台中的详细信息
现在构建并运行。它将解决问题。