2014-12-05 5 views
0

저는 몇 년 전에 엔티티 프레임 워크에서 작업했으며, 이것은 약간 녹슬지 않을 수 있습니다. 나는 엔티티를 분리 했으므로 여러 엔티티 엔티티가 차례로 있습니다. 제 경우에는 그것은 하나의 엔티티이고 각 사람마다 여러 개의 주소가 있습니다.엔티티 프레임 워크와 일대 다 관계가 올바르게 저장되지 않음

myPerson.FirstName="update first name"; 
//assuming they already have an address in the first entry 
//with appropriate primary keys and foreign key ids, I could do: 
myPerson.Addresses.First().Line1="update line 1"; 
myPerson.Addresses.Add(new Address(){line1="weee",line2="aaaa" postal="12345", type="work"}); 
myDb.Person.Attach(myPerson); 
myDb.Entry(myPerson).State=EntityState.Modified; 
myDb.SaveChanges(); 

이와 같은 시나리오를 수행 할 때 나는 이름으로 기대하는 것을 얻습니다. 이름을 업데이트하면 위 코드에서 다른 필드 (성, 생일 등)가 실제로 비워집니다. 그러나 사람의 새 주소를 만들지 않으며 기존 주소를 업데이트하지 않습니다.

위의 사람과 관련된 관련 엔터티를 업데이트하는 방법을 알기 위해 데이터베이스 컨텍스트에 대한 추가 작업이 필요하다는 점을 기억하지 않습니다. 내 Google 검색에서 나는 상당한 양의 작업을 DB에서 불러 와서 그런 식으로 마을에 갈 필요가 있다는 이야기를 듣는 것 같습니다. 나는 그것이 사실이 아니길 바란다.

답변

0

당신이이 라인은 붙여 넣은 코드의 핵심 부분 ...

myDb.Person.Attach(myPerson); 
myDb.Entry(myPerson).State=EntityState.Modified; 

컨텍스트에 전체 개체 그래프를 연결하고 변경되지 않은이 그래프에 각 엔티티의 상태를 설정합니다 첫 번째 줄. 두 번째 코드 행은 루트 엔티티의 상태를 수정 됨으로 설정합니다 (주소 엔티티와 같은 나머지는 변경되지 않은 상태로 유지됩니다). 변경 내용이 저장되면 단일 엔터티 만 업데이트됩니다.

물론 이것은 단절된 엔티티 (하나의 컨텍스트를 사용하여 개체 그래프를 가져오고 다른 하나는 업데이트를 수행하기 위해)를 사용한다고 가정합니다. 나는 당신이 엔티티를 첨부하고 있다고 가정합니다. */

끊김 기관에

은/* 호언 장담은 슬프게도 뭔가는 EF 공간에서 잘 처리되지 않습니다. 연결이 끊긴 항목을 처리하려고 시도하는 책과 블로그에서 많은 샘플을 찾을 수 있지만 이러한 전략은 고급 항목 (예 : 관련 항목 모음을 비롯한 개체 그래프)을 구현하려고 할 때 신속하게 분리됩니다.

/* Rant Off */

+0

시간을내어 의견을 보내 주셔서 감사합니다. 나는 EF를하고있는 마지막 시간을 되돌아 보았고, 나는 매우 다른 시나리오에 있다는 것을 깨달았다. 이전 시나리오에서는 WPF 앱의 데이터 저장소로 로컬 sqlite 파일에 대해 EF를 수행했습니다. 그래서 나는 지역 파일에 국유가 많은 환경에 있었고, 나는 분리 된 것들보다 항상 연결된 실체들과 항상 일하고 있었다. – Danny

+0

현재 나의 시나리오에서는 비즈니스 논리 개발자가 비즈니스 로직 코드와 별도로 엔티티 프레임 워크의 특성을 유지하는 인터페이스에 대해 작성할 수있는 무언가를 만드는 중입니다. 이전 애플리케이션은 비즈니스 코드에서 사용 된 것과 다른 ORM을 추상화하지 않고 (전임자가 작성한 것입니다.) 이러한 애플리케이션에서 완전히 다른 ORM이라고 할 수 있습니다. 나는 우리가 EF에서 변화하고 싶지 않을지라도 그 실수를 다시하고 싶지 않습니다. 분리 된 엔티티의 경우 너무 힘들어 야합니다. 감사. – Danny