2012-12-05 49 views
0

我碰到一個錯誤,指出:我打了一個錯誤,當我嘗試一個新的評論添加到我的數據庫

INSERT語句衝突與外鍵約束「FK_dbo.Comments_dbo.Posts_PostID」。數據庫「MVCProjectApp.Models.DBPostsContext」,表「dbo.Posts」,列「PostID」發生衝突。
該聲明已被終止。

我很失落,不知道該怎麼辦

下面是創建註釋

@model MVCProjectApp.Models.Comment 

@{ 
    ViewBag.Title = "Create Comment"; 
} 

<h2>Create</h2> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Comments</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Username) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Username) 
      @Html.ValidationMessageFor(model => model.Username) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Message) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Message) 
      @Html.ValidationMessageFor(model => model.Message) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Timestamp) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Timestamp) 
      @Html.ValidationMessageFor(model => model.Timestamp) 
     </div> 


     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "~/FullPost/Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

這是我傳遞的帖子ID來註釋創建ActionLink的

// 
     // GET: /Comment/Create 

     public ActionResult Create() 
     { 
      ViewBag.PostID = new SelectList(db.Posts, "PostID", "Title"); 
      return View(); 
     } 

     // 
     // POST: /Comment/Create 

     [HttpPost] 
     public ActionResult Create(Comment comment) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Comments.Add(comment); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.PostID = new SelectList(db.Posts, "PostID", "Title", comment.PostID); 
      return View(comment); 
     } 

這裏是評論模型

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace MVCProjectApp.Models 
{ 
    public class Post 
    { 
     public int PostID { get; set; } 
     public string Title { get; set; } 
     public string Message { get; set; } 
     public DateTime Timestamp { get; set; } 
     public virtual ICollection<Comment> Comments { get; set; } 
    } 
    public class Comment 
    { 
     public int CommentID { get; set; } 
     public int PostID { get; set; } 
     public string Username { get; set; } 
     public string Message { get; set; } 
     public DateTime Timestamp { get; set; } 
     public virtual Post Post { get; set; } 
    } 
} 
+0

它說,您提供的外鍵在主表中不存在。 –

回答

1

我丟失,不知道該怎麼

你應該看看你得到了什麼樣的錯誤。它說你試圖插入評論。在插入嘗試確保Comment有一個它知道的PostID之前,DBMS運行的外鍵約束檢查。你不設置它,所以它將默認爲0,這在Posts表中不存在,因此是錯誤。

您應該在致電SaveChanges()之前設置Comment的PostID,這可以通過在視圖中添加@Html.HiddenFor(m => m.PostID)字段來完成。然後在控制器中設置模型的PostID。

+0

如何傳遞postid變量,它位於url中,當我轉到評論頁面 – Scott

+0

@Scott,這取決於您的URL。你可以例如使用'Request.QueryString [「ProjectID」]'。 – CodeCaster

+0

我如何在控制器中設置postid – Scott

0

您需要將評論與帖子相關聯。最簡單的解決方案是爲視圖添加一個隱藏的帖子ID。

+0

我試過了@ html.hiddenfor(model => model.PostID),但後來數據庫沒有創建任何東西 – Scott

+0

隱藏的字段在窗體內,是否正確?應在註釋模型中設置「PostID」。如果這不起作用,您可以從數據庫加載Post對象,並將'Comment'添加到'post.Comments'集合中。 –

相關問題