Entity Framework 4, POCO 개체 및 ASP.Net MVC2. BlogPost와 Tag 엔티티 사이에 다 대다 관계가 있습니다. 이것은 내 T4 생성 POCO BlogPost 클래스에 다음이 있음을 의미합니다.
public virtual ICollection<Tag> Tags {
// getter and setter with the magic FixupCollection
}
private ICollection<Tag> _tags;
ObjectContext 인스턴스에서 BlogPost 및 관련 태그를 요청하고 다른 레이어로 보냅니다 (MVC 애플리케이션에서보기). 나중에 속성이 변경되고 관계가 변경된 업데이트 된 BlogPost를 다시 가져옵니다. 예를 들어 태그 "A" "B"와 "C"가 있고 새 태그는 "C"와 "D"입니다. 내 특정 예에서는 새 태그가없고 태그의 속성이 변경되지 않으므로 저장해야하는 유일한 것은 변경된 관계입니다. 이제 이것을 다른 ObjectContext에 저장해야합니다. (업데이트 : 이제 동일한 컨텍스트 인스턴스에서 시도했지만 실패했습니다.)
문제 : 관계를 제대로 저장하지 못합니다. 내가 찾은 모든 것을 시도했습니다.
- Controller.UpdateModel 및 Controller.TryUpdateModel이 작동하지 않습니다.
- 컨텍스트에서 이전 BlogPost를 가져온 다음 컬렉션을 수정하는 것은 작동하지 않습니다. (다음 시점에서 다른 방법으로)
- 이것은 아마도 작동 할 것이지만 이것이 해결책이 아닌 해결 방법이기를 바랍니다.
- 가능한 모든 조합에서 BlogPost 및 / 또는 태그에 대한 Attach / Add / ChangeObjectState 함수를 시도했습니다. 실패한.
- 이것은 내가 필요한 것처럼 보이지만 작동하지 않습니다 (문제를 해결하려고했지만 문제를 해결할 수 없습니다).
- ChangeState / Add / Attach / ... 컨텍스트의 관계 개체를 시도했습니다. 실패한.
"작동하지 않음"은 대부분의 경우 오류가 발생하지 않고 적어도 BlogPost의 속성을 저장할 때까지 주어진 "솔루션"에 대해 작업했음을 의미합니다. 관계에서 발생하는 일은 다양합니다. 일반적으로 태그는 새 PK가있는 태그 테이블에 다시 추가되고 저장된 BlogPost는 원본이 아닌이를 참조합니다. 물론 반환 된 태그에는 PK가 있으며 저장 / 업데이트 메서드 전에 PK를 확인하고 데이터베이스에있는 것과 동일하므로 EF는 새 개체이고 해당 PK가 임시 개체라고 생각합니다.
내가 알고 있고 자동화 된 간단한 솔루션을 찾는 것이 불가능할 수있는 문제 : POCO 개체의 컬렉션이 변경되면 위에서 언급 한 가상 컬렉션 속성에 의해 발생해야합니다. FixupCollection 트릭이 반대쪽에서 역 참조를 업데이트하기 때문입니다. 다 대다 관계의. 그러나 View가 업데이트 된 BlogPost 개체를 "반환"할 때는 발생하지 않았습니다. 이것은 아마도 내 문제에 대한 간단한 해결책이 없을 수도 있지만 그것은 나를 매우 슬프게 할 것이고 EF4-POCO-MVC 승리를 싫어할 것입니다. :(. 또한 그것은 EF가 MVC 환경에서 이것을 할 수 없다는 것을 의미합니다. EF4 객체 유형이 사용됩니다 :(. 변경된 BlogPost가 기존 PK를 사용하는 태그와 관계가 있다는 것을 스냅 샷 기반 변경 추적에서 알아 내야한다고 생각합니다.
Btw : 일대 다 관계에서도 같은 문제가 발생한다고 생각합니다 (구글과 제 동료는 그렇게 말합니다). 집에서 시도해 보겠습니다.하지만 앱에서 6 개의 다 대다 관계에 도움이되지 않는다고해도 :(.