【发布时间】: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