2017-12-24 28 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

이것은 암시 적 접합 테이블의 단점 중 하나입니다.

그럼에도 불구하고 그것은 당신이 두 개의 "그루터기"엔티티를 생성하여 요구하는 일을 할 상황 (그들은 기존되는이 이야기의 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();