2013-05-09 6 views
1

ForeignKey-ID를 설정하여 이전 엔터티에 외래 키 엔터티를 추가 할 때마다 연결된 개체가 null입니다. NavigationProperty 추가 외래 키에 null이 있음

날이 설명하자 enter image description here

을 내가 28AddressId 속성을 설정했고 context.SaveChanges()를 호출하여 개체 컨텍스트를 저장 한 이전 단계에서. null이다 (Address.Id == 28Address 테이블의 Address 객체 있어야)를 NavigationProperty 이유를 이제 AddressId는 충전

하지만 Address?

답변

2

Entity Frameworks (EF)는 의도적으로이 작업을 수행합니다. 외래 키를 업데이트해도 탐색 속성이 업데이트되지 않습니다.

그러나 탐색 속성을 업데이트하면 키가 업데이트됩니다. 이 경우 Address 엔티티가 동일한 컨텍스트에서 제공되어야합니다. 그렇지 않은 경우 .SaveChanges()Address 엔티티를 새로운 것으로 간주하여 데이터베이스에 추가하려고합니다.

어떤 방법이 더 나은지에 대한 질문에 대해서는 잘 맞습니다!
- 키를 업데이트하는 것은 간단하며 데이터 전송 개체 (DTO) 또는 일반 SQL을 사용하여 수행 한 작업입니다. 초보자가 EF를 쉽게 이해하고 사용할 수 있습니다.
- 탐색 속성을 업데이트하면 실제로 개체 기반 데이터 모델을 얻을 수 있습니다. 코드는보다 깨끗하고 읽기 쉽게 보입니다. 그러나 Context를 매우 조심해야합니다. EF에 대한 개인적인 경험으로는 네비게이션 속성을 업데이트하려고 할 때 특히 데이터 액세스 레이어 뒤에 컨텍스트가 숨겨져있는 다중 계층 아키텍처에서 가치보다 복잡성이 더 많이 발생한다는 것을 알았습니다.

제 생각에 EF의 가장 중요한 이점은 LINQ-to-Entities를 사용하는 쿼리 작업입니다. 내 쿼리 및 강력한 입력을위한 컴파일 타임 구문 검사가 있습니다. 추가 코드 없이도 여러 수준의 하위, 데이터 바인딩 준비가 가능한 객체 기반 결과 집합을 쉽게 만들 수 있습니다. 나는 거의 SQL을 쓰지 않는다.

+0

답변 해 주셔서 감사합니다. 더 나은 점은 키를 업데이트하거나 전체 탐색 속성을 업데이트하는 것입니다. – SeToY

+0

+1 합리적인보기는 –

0

나는 으로 고정했습니다. 엔티티를 다시 만들고 다시로드하면됩니다. 이것은 n : m 관계 탐색 속성을 다시 작동 시키려고하는 것 같습니다. 기묘한.

+0

예, 작동하지만 데이터베이스에 추가 쿼리가 발생합니다. – Michael

+0

컨텍스트의 객체가 이미 있고 fk ID를 설정하면 EF는 Nav 속성을 쉽게 가리키거나 표시 할 수 있습니다. 당신이 nav 속성에 접근하면, 그것을 넘기 위해로드 할 것입니다. 나는 개인적으로 fk Ids만을 사용하고 건물 그래프로도 너무 흥분하지 않습니다. 읽을 때 탐색 용 소품에 액세스하려고합니다. –