违反PRIMARY KEY约束''无法在对象中插入重复键''。重复键值为(,)

时间:2014-02-09 16:34:56

标签: c# linq-to-sql

您好我的代码中包含问题的两个部分。

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();”中,至少我是这么认为的,尽管我没有什么经验可以用明显的信心说话。我看了其他的情况,但它会帮助我找不到。请告诉我哪里出错了?

1 个答案:

答案 0 :(得分:0)

我理解问题“db.Entry(post).State = 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 />
相关问题