Adding Item with Many-to-Many Relationship In Entity Framework

后端 未结 2 1948
栀梦
栀梦 2020-12-10 15:11

I am getting a primary key violation error when I attempt to add an item with a many-to-many relationship:

I have two classes - Articles and Tags which have a many-t

2条回答
  •  执念已碎
    2020-12-10 16:01

    Use the same context instance for the whole processing of your operation and your life will be much easier:

    using (var ctx = new MyContext())
    {
        Article article = ctx.Articles.Single(a => a.Id == articleId);
        Tag tag = ctx.Tags.SingleOrDefault(t => t.UrlSlug == tagUrl);
        if (tag == null) 
        {
           tag = new Tag() { ... }
           ctx.Tags.AddObject(tag);
        }
    
        article.Tags.Add(tag);
        ctx.SaveChanges();
    }
    

    If you don't want to load the article from database (that query is redundant if you know that article exists) you can use:

    using (var ctx = new MyContext())
    {
        Article article = new Article() { Id = articleId };
        ctx.Articles.Attach(article);
    
        Tag tag = ctx.Tags.SingleOrDefalut(t => t.UrlSlug == tagUrl);
        if (tag == null) 
        {
           tag = new Tag() { ... }
           ctx.Tags.AddObject(tag);
        }
    
        article.Tags.Add(tag);
        ctx.SaveChanges();
    }
    

提交回复
热议问题