0

我在实体框架中有多对多的关系。查看图片... 多对多


我想为这篇文章插入一篇文章和标签,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 中完成的?我是新手...

4

2 回答 2

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);
}
于 2012-06-27T09:58:50.683 回答
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();

            }
        }
    }
}

希望这对你有帮助,:)

于 2012-06-27T10:24:40.437 回答