2014-02-09 62 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 /> 
相关问题