使用某些逻辑在EF中插入多对多

时间:2012-06-27 09:42:04

标签: c# .net entity-framework insert many-to-many

我在实体框架中有很多关系。见图片...... many to many


我想为本文插入一篇文章和标签, TagName属性在db中是唯一的,因此我只需要在TagsArticlesToTags中插入新标签(在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中完成?我是新来的......

2 个答案:

答案 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)

检查数据库,您必须在关系表中添加一个双列主键。 像这样: enter image description here

这是我的代码,与你的代码相同,并且有效:

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();

            }
        }
    }
}

希望这可以帮助你,:))