繁体   English   中英

INSERT 语句与 FOREIGN KEY 约束冲突

[英]The INSERT statement conflicted with the FOREIGN KEY constraint

我目前正在学习 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>

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

我认为餐馆有问题。 尝试添加检查是否存在已审核的餐厅。 而且我还建议为您的模型添加验证属性,例如[Required]

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

在某些情况下,EF 认为分离的实体是一个新实体(例如,如果我们正在获取内部有餐厅的评论)并尝试将其添加到数据库中,但由于完全相同的实体已存在而获得异常。 如果我们不需要它,我们必须阻止它保存餐厅,所以我们应该只保存评论。

另外,正如其他人提到的,您可能只是对不存在的餐厅添加评论(不确定您是否是这种情况,我想这种问题很容易检测到)

如果它对您有帮助/没有帮助,请告诉我。

添加以下属性

public int RestaurantId { get; set; } 

RestaurantReview模型类中。

和 Update-Database -Verbose 在包管理器控制台中

现在构建并运行。 它将解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM