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

データベースを確認してください。リレーションシップテーブルに2列の主キーを追加する必要があります。このような: ここに画像の説明を入力してください

これが私のコードです。あなたのコードと同じです。これで機能します。

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 に答える