2016-04-29 219 views
-1

我目前正在学习ASP.NET MVC应用程序。基本上我创建了一个名为Restaurant Review的EF的MVC 4应用程序。但是,当我创建一个新的审查时,它显示一个错误。我知道这一定是我错过的东西。INSERT语句与FOREIGN KEY约束冲突

的错误是

INSERT语句冲突与外键约束 “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> 
+1

看起来你正试图在一家不存在的餐厅上创建一个评论。 – DrewJordan

+0

你有没有调试到你的'Create'方法来确保'review.RestaurantId'包含一个有效的标识符? –

+0

您的'Create()'GET方法没有将'restaurantId'的值传递给视图,因此当您提交表单时,'review.ResturantId'的值为'0',因此您会得到该错误。并且在你的视图中使用视图模型,而不是数据模型 –

回答

0

我认为你IdRestaurant表的属性不是唯一或主键。请先检查并重试。

0

我觉得有什么不对的餐馆。尝试添加检查,如果审查的餐厅确实存在。我还建议为您的模型添加验证属性,如[Required]

0

此问题可能是由实体框架造成的。检查您的Review实体内是否有Restaurant字段。如果是这样,请在保存评论之前为其指定null(只需将ID保留在RestaurantId字段内)。

在某些情况下,EF认为一个分离的实体是一个新的实体(就像我们在里面得到一个Restaurant餐厅的评论一样),并试图将它添加到数据库中,得到一个异常,因为完全相同的实体已经存在。如果我们不需要它,我们必须阻止它保存餐厅,所以我们应该保存评论。

此外,如其他人所说,你可能只是增加一个审查的不存在的餐厅(不知道是否对你的情况,我想这样的问题是很容易检测)

让我知道如果它/不帮助你。

相关问题