我是新來的'實體框架'和'代碼第一'的世界,所以忍受着我。我有2個實體文章和標籤。 Tag中的TagName列必須是唯一的,因爲它是關鍵。在後續文章中使用現有標籤時,我遇到了主鍵違規問題。我的實體如下所示EF 6與多對多關係的主鍵違規
public class Article
{
public Article()
{
}
public int Id { get; set; }
[StringLength(100)]
[Required]
public string Title { get; set; }
[Required]
public string Body { get; set; }
public virtual List<Tag> Tags { get; set; }
}
和
public class Tag
{
public Tag()
{
}
public Tag(string tagName)
{
TagName = tagName;
}
[Key]
[StringLength(25)]
public string TagName { get; set; }
public virtual List<Article> Articles { get; set; }
public override string ToString()
{
return this.TagName;
}
}
EF創建文章,標籤3個表和TagArticles關係
這裏是我的代碼來保存文章
var editedTags = Request["Tags"];
if (!string.IsNullOrEmpty(editedTags))
{
var tags = Regex.Split(editedTags, "\r\n");
if (tags != null && tags.Length > 0)
{
foreach (var tag in tags)
{
article.Tags.Add(new Tag(tag));
}
}
}
//db is my context
db.Articles.Add(article);
db.SaveChanges(); //Crashes here if the tag already exists
除了從手動創建標籤開始,有沒有辦法告訴EF檢查標籤是否先存在b在創建它之前要避免重複?
那麼你問** **添加一個新的標籤,所以它會嘗試。我會先查詢一個現有的標籤,如果它不存在,然後添加它。簡而言之:不,AFAIK你必須手動完成,它完全符合你的要求。 –
我認爲'爲現有的標籤/文章'更新'(刪除/添加)'標籤 - 文章關係'可能還需要手動編碼。 – Kaf
@Adriano,我希望有一些'EF魔術'。然後我會手動完成。 –