2014-02-09 104 views
1

你好,我有以下的標籤問題的兩個部分代碼。違反PRIMARY KEY約束''無法在對象中插入重複鍵''。重複的鍵值是(,)

public ActionResult Edit(int? id){ 
      if (id == null) 
      {return new HttpStatusCodeResult(HttpStatusCode.BadRequest);} 
      Post post = db.Posts.Find(id); 

      StringBuilder tagList = new StringBuilder(); 
       foreach (Tag tag in post.Tags) 
       { 
        tagList.AppendFormat("{0} ", tag.Name); 
       } 
       ViewBag.Tags = tagList.ToString(); 

      if (post == null){return HttpNotFound();} 
      return View(post);} 

第1部分在同一字段中添加行標籤。 標籤中相反行的第2部分。

public ActionResult Edit([Bind(Include = "Id,Title,DateTime,Body,Avtor")] Post post, string tags) 
      {if (ModelState.IsValid){ 
        db.Entry(post).State = EntityState.Modified; 

        post.Tags.Clear(); 
        tags = tags ?? string.Empty; 
        string[] tagNames = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
        foreach (string tagName in tagNames) 
        { 
         post.Tags.Add(GetTag(tagName)); 
        } 

        db.SaveChanges(); 
        return RedirectToAction("Index");} 
       return View(post);} 

問題行「post.Tags.Clear();」它不會刪除的連接,我得到一個錯誤:

"Violation of PRIMARY KEY constraint 'PK_PostsTags'. Cannot insert duplicate key in object 'dbo.PostsTags'. The duplicate key value is (1, 3). 
The statement has been terminated." 

「db.SaveChanges();」,至少我是這麼認爲的,雖然我沒有什麼經驗,具有明顯的信心說話。我看了其他案件,但它會幫助我找不到。請告訴我我哪裏出錯了?

+0

這是一個標識列? –

+0

它必須是根據錯誤的身份或PK列。錯誤很明顯地告訴你,你正試圖插入帶有重複鍵的記錄。如果您打算以這種方式插入,請從插入中移除ID列,它將自動生成新的標識值。 –

+0

我必須要桌子和2把鑰匙postid tegid,這對於一堆桌子來說是必要的,很多很多。 – user3240336

回答

0

我理解這個問題 「db.Entry(POST)狀態= EntityState.Modified。」它只保留了視圖中的內容,儘管不能確定,因爲交換沒有任何變化。必須爲您的對象的每個單元格創建一個帖子並更改視圖,全部獲得。

public ActionResult Edit(int? id, string avtor, string title, string body, string BodyPost, DateTime dateTime, string tags) 
     { 
       Posts post = db.Posts.Find(id); 
       post.Title = title; 
       post.Body = body; 
       post.DateTime = dateTime; 
       post.Tags.Clear(); 
       post.Avtor = avtor; 

       tags = tags ?? string.Empty; 
       string[] tagNames = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
       foreach (string tagName in tagNames) 
       { 
        post.Tags.Add(GetTag(tagName)); 
       } 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
     } 
<h5>Title:</h5><input type="text" name="title" value="@Model.Title" /><br /> 
<h5>Tags:</h5><input type="text" name="tags" value="@ViewBag.Tags" /><br /> 
<h5>DateTime:</h5><input type="text" name="dateTime" value="@Model.DateTime" /><br /> 
<h5>Body:</h5><textarea name="body" rows="10" cols="80"> @Model.Body</textarea><br /> 
<h5>Avtor:</h5><input type="text" name="avtor" value="@Model.Avtor" /><br /> 
相關問題