我在实体框架中有很多关系。见图片......
我想为本文插入一篇文章和标签,但 TagName属性在db中是唯一的,因此我只需要在Tags
和ArticlesToTags
中插入新标签(在EF表中没有显示,而Tags
中已有的其他表只需要插入ArticlesToTags
。
public void CreateUpdate(string title, string subTitle, string text,
string author, string tags, string photo, bool allowComments)
{
using (var context = new blogEntities())
{
var article = new Article()
{
Title = title,
SubTitle = subTitle,
ArticleText = text,
Author = author,
Photo = photo,
CreateDate = DateTime.Now,
ModifyDate = null,
AllowComments = allowComments
};
foreach (var tg in tags.Split(','))
{
article.Tags.Add(new Tag() { TagName = tg });
}
context.Articles.AddObject(article);
context.SaveChanges();
}
}
现在它抛出了无法插入重复的唯一键的例外如何在EF中完成?我是新来的......
答案 0 :(得分:3)
添加一个select语句,以查看数据库中是否已有标记。
foreach (var tg in tags.Split(','))
{
var tag = context.Tags.SingleOrDefault(x => x.TagName == tg);
if (tag == null)
tag = new Tag() { TagName = tg };
article.Tags.Add(tag);
}
答案 1 :(得分:0)
检查数据库,您必须在关系表中添加一个双列主键。 像这样:
这是我的代码,与你的代码相同,并且有效:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication13
{
class Program
{
static void Main(string[] args)
{
using (manytomanyEntities entities = new manytomanyEntities())
{
List<B> bList = new List<B>();
A a = new A
{
Name = "Tim_A"
};
for (int i = 0; i < 100; i++)
{
B b = new B
{
Name = "Tim_B_" + i
};
entities.B.AddObject(b);
}
entities.A.AddObject(a);
entities.SaveChanges();
}
}
}
}
希望这可以帮助你,:))