2

(많은 관계로 많은) 관련 데이터를 추가/삭제 :Linq에 - 관련 태그 - 나는 곳이

public virtual int PlaceID { get; set; } 
public virtual ICollection<Tag> Tags { get; set; } 
public virtual string Name { get; set; } 

및 관련 태그 모델 :

이 장소의 모델이

public virtual int TagID { get; set; } 
public virtual string Name { get; set; } 
public virtual string NamePlural { get; set; } 
public virtual ICollection<Place> Places { get; set; } 

many to many relationships.

예를 들어 장소에 '바'및 '카페'태그가있을 수 있습니다. (또한 많은 장소에서 이러한 태그를 사용할 수 있습니다).

관련 태그가있는 장소를 잘 추가 할 수 있습니다. 그러나 Linq가있는 장소와 관련된 태그를 어떻게 조작 할 수 있습니까? (추가/삭제/편집).

또한 - 관련 태그가있는 장소 모델을 저장하려고하면 장소가 업데이트되지만 태그는 업데이트되지 않습니다. 어떻게해야합니까?

place.Tags = SelectedTags 
db.Entry(ptvm.place).State = EntityState.Modified; 
db.SaveChanges(); 

감사합니다.

답변

3

당신이 무엇을하고 왜하는지 알고있는 경우 엔티티의 엔티티 상태와 함께 micromanagement를 사용해야합니다.

이 경우 엔티티 프레임 워크에 제어 권한을 부여해야합니다.

 db.Places.Attach(place); 
     context.Entry(place).Collection(p => p.Tags).Load(); 

     foreach(var tag in SelectedTags) 
     { 
      place.Tags.Add(tag); 
     }    
     db.SaveChanges(); 

추가 참고 사항 : 탐색 속성 ICollection을 새 컬렉션으로 변경할 수 없습니다. 추가, 제거 및 삭제 만 가능합니다. 이 콜렉션을 제거하거나 지우려면 이전에 데이터베이스에서로드해야합니다.

+0

감사합니다. micromanagement가 무엇을 의미합니까? 장소에 2 개의 태그 '카페'와 '바'가 있으며 '카페'를 삭제하고 '레스토랑'을 추가하려고합니다. 먼저 모든 태그를 지우고 '바'와 '레스토랑'을 추가해야합니까? 그렇게하는 가장 좋은 방법은 무엇입니까? – niico

+0

1. Micromanagement는 EntityState를 수동으로 변경하여 모든 수정 된 엔터티에 대해 수정 한 것입니다. 2. 내가 어디에서 내가 바를 선택하고 식당을 추가하면. –

+0

나는 이것을 구현했고 이것을 'place.Tags.Add (tag) : "객체 참조가 객체의 인스턴스로 설정되지 않았다." - 그러나 디버그 중 ISNT 태그가 null 인 경우 – niico