2017-12-24 7 views
2

私は最初に多対多のリレーションシップを持っています。Entity Frameworkの多対多リレーションシップにエンティティを追加します

public class Post 
{ 
    public int Id { get; set; } 
    public ICollection<Tag> Tags { get; set; } 
} 

public class Tag 
{ 
    public int Id { get; set; } 
    public ICollection<Post> Posts { get; set; } 
} 

modelBuilder.Entity<Post>().HasMany(c => c.Tags).WithMany(a => a.Posts);  

私が正しくあなたの質問を理解している場合、私はPostIdTagId、私は(負荷PostまたはTagがなければ、それに関係を追加)エンティティフレームワークでは、単一のクエリとの関係を挿入するにはどうすればよい

答えて

1

これは暗黙的な接合テーブルの欠点の1つです。

それでもそれは、あなたが2、「スタブ」エンティティを作成することにより、求めているものを行うコンテキスト(彼らが存在している。この占いEF)にそれらを取り付けることが可能だし、他のコレクションにそれらのいずれかを追加:

using (var db = new YourDbContext()) 
{ 
    var post = db.Posts.Attach(new Post { Id = postId }); 
    var tag = db.Tags.Attach(new Tag { Id = tagId }); 
    post.Tags = new List<Tag> { tag }; 
    db.SaveChanges(); 
} 

上記のテクニックのハックアイという性質のため、操作のために特に割り当てられた短い有効期間のコンテキストでのみ使用してください。

0

を持っている場合は、ナビゲーションプロパティの挿入を無視したいとします。コレクションプロパティのstate'UnChanged'に変更して、プロパティの挿入を回避できます。

次のようになります。

_context.Posts.Add(post); 

_context.Entry(post.Tags).State = EntityState.Unchanged; 

_context.SaveChanges(); 
関連する問題