2016-06-01 6 views
0

person이라는 새 개체를 만들고이 개체를 address라는 데이터베이스에 이미있는 레코드에 연결한다고 가정 해 봅시다. 가서 Person 객체를 저장할 때 주소를 두 번 삽입하고 복제본을 만들지는 않습니다. EF로 이것을 처리하는 가장 좋은 방법은 무엇입니까?Entity Framework 개체 상태 new/existing

+0

이 사람 객체를 생성 한 후, 당신은 단순히 ADRESS 멤버를 설정 한 사람의 기록을, 사용 방법을 추가 한 후 변경 사항을 저장 – Kevorkian

+0

그래하지만 난 (삽입) 저장할 –

+0

단순히 (사람) 방법, 및 경우 추가 사용 주소에있는 사람에 대한 참조가 있으니 업데이트해야합니다. – Kevorkian

답변

1

이렇게하는 가장 좋은 방법은 전체 개체가 아닌 외래 키 필드 만 설정하는 것입니다. 예를 들어

, 여기

Person p = new Person(); 
p.Name = "John Doe"; 
p.AddressId = 12345; 
context.People.Add(p); 
context.SaveChanges(); 

는 EF 레코드를 복제하는 이유를 설명 줄리 러먼의 뛰어난 기사입니다. https://msdn.microsoft.com/en-us/magazine/dn166926.aspx

+0

Person 클래스에 Address 탐색 속성 외에도 AddressId 속성이있는 경우에만 작동한다는 점에 유의해야합니다. –

+0

탐색 속성에 주소가 있고 ID에 EF가 중복을 만들면 –

+0

주소가 있고 그 사람이 새 주소 인 경우 주소 탐색 속성을 설정하지 않아야합니다. 코드를 통해 설정하려는 경우 외래 키 ID 필드를 설정했는지 여부에 관계없이 EF에 주소가 이미 존재하는지 또는 새 주소가 만들어 지는지 EF에게 알려야합니다. 내가 언급 한 기사 (context.Entry (topic) .State = EntityState.Unchanged)는 기존 주소를 무시하도록 EF에 알려주는 내용입니다. ID 필드는 설정해야하며 네비게이션 속성은 내가 제공 한 대답을 사용하지 않습니다. 그렇지 않으면 줄리가 코드에서 엔티티의 상태를 제안하고 관리 할 때해야합니다. – user1011627

관련 문제