Entity Framework 7에서 수정 된 탐색 속성 표시

entity-framework-core

문제

모든 변경 내용을 명시 적으로 표시하기 때문에 비활성화 된 변경 내용 추적 기능이있는 EF7 DbContext 가 있습니다.

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

이것은 내가 원하는대로 정확하게 작동합니다.

그러나 참조 (탐색 속성)가 업데이트 된 경우에는 작동하지 않습니다.

예를 들어 내 엔터티에 ParentIdParent 라는 두 개의 속성이 있다고 가정 해 보겠습니다. 여기서 ParentId 는 외래 키이고 Parent 는 상위 엔터티에 대한 참조입니다.

부름

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

Parent 가 EF 측면에서 엔티티의 속성이 아니기 때문에 ModelItemNotFoundException 이 발생합니다 (네비게이션).

EF6에서는 다음과 같이 수행 할 수 있습니다.

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

EF7에는 그러한 기능이 없습니다. 나는 함께 INavigation 개체를 얻을 수 있습니다.

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

수정 된 것으로 표시하는 방법은 보이지 않습니다.

그래서, 어떻게해야합니까?

참고 : ParentId 를 설정하면 효과가 있지만, 참조 된 엔티티는 아직 생성되지 않았으므로 아직 ID가 없기 때문에 적합하지 않습니다. 저장된 ID는 데이터베이스에서 가져옵니다. 따라서 참조 Parent 통해 설정해야합니다.

편집하다:

위의 메모는 EF6에 대해서는 사실 이었지만 더 이상 알지 못하는 EF7에는 유효하지 않습니다. 따라서 솔루션은 아래의 주 및 대답에 설명 된 것과 같습니다.

수락 된 답변

와우, 새로운 엔티티가 DbContext 첨부 될 때 실제로 ID를 얻는 것 같습니다 (제 경우에는 -1). 그래서 대상 엔티티가 새 것이고 아직 데이터베이스에 추가되지 않은 경우에도 ParentId 설정할 수 있습니다 .

새 ID가 고유하다는 검사 (ID가 이미 데이터베이스에 -1 인 항목이있을 수 있음)가 있는지 궁금합니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.