【问题标题】:Violation of PRIMARY KEY constraint '' Cannot insert duplicate key in object ''. The duplicate key value is (,)违反 PRIMARY KEY 约束 '' 不能在对象 '' 中插入重复键。重复键值为 (,)
【发布时间】:2014-02-09 16:34:56
【问题描述】:

您好,我的代码由标签中问题的两部分组成。

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();”行中,至少我是这么认为的,尽管我没有多少经验可以自信地说话。我查看了其他案例,但它会帮助我找不到。请告诉我哪里出错了?

【问题讨论】:

  • 这是一个身份列吗?
  • 根据错误,它必须是标识或 PK 列。该错误清楚地告诉您您正在尝试插入具有重复键的记录。如果您打算以这种方式插入,请从插入中删除 ID 列,它将自动生成新的标识值。
  • 我要table和2个key postid tegid,是必须的一堆table,多对多。
  • 确保post.Tags在修改前已加载。
  • 我有一个按帖子 ID 添加标签的功能,但现在我想在添加新标签之前删除该 ID 的所有当前标签?

标签: c# linq-to-sql


【解决方案1】:

我理解问题“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 />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    相关资源
    最近更新 更多