【发布时间】:2011-10-13 00:42:18
【问题描述】:
当我尝试添加具有多对多关系的项目时出现主键违规错误:
我有两个类 - 具有多对多关系的文章和标签:
public class Article
{
public int ID { get; set; }
public string Text { get; set; }
public ICollection<Tag> Tags { get; set; }
}
public class Tag
{
[Key]
public string UrlSlug { get; set; }
public string Name { get; set; }
public ICollection<Article> Articles{ get; set; }
}
当我添加新文章时,我允许用户输入任何标签,然后如果标签尚未在数据库中创建,我想创建一个新标签,或者将标签添加到文章对象的标签集合中标签已经存在。
因此,当我创建新的 Article 对象时,我会调用以下函数:
public static Tag GetOrLoadTag(String tagStr)
{
string tagUrl = Tag.CreateTagUrl(tagStr);
var db = new SnippetContext();
var tagFromDb = from tagdummy in db.Tags.Include(x => x.Articles)
where tagdummy.UrlSlug == tagUrl
select tagdummy;
if (tagFromDb.FirstOrDefault() != null)
{ return tagFromDb.FirstOrDefault(); }
else
{
//create and send back a new Tag
}
}
此函数主要检查数据库中是否有可用的标签,如果有则返回该标签,然后使用 article.Tags.Add() 将其添加到 Article 对象的标签集合中。
但是,当我尝试使用下面的代码保存它时,我得到一个违反 PRIMARY KEY 约束的错误
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
我不知道应该如何在文章和现有标签之间建立关系。
【问题讨论】:
-
能否提供更多细节和完整代码?
标签: c# .net entity-framework exception primary-key