2009-10-27 2 views
1

SaveChanges를 사용할 때 many-to-many 관계가 저장되고 INSERT 문이 충돌하지 않도록 속성을 설정해야하는 이유는 무엇입니까? FOREIGN KEY 제약 조건 오류가 발생했습니다.Entity Framework/.Net 4.0 : POCO 및 다 대일 관계 저장

매우 간단합니다. AdType과 AdType은 하나의 AdType에 여러 광고가 있습니다. 광고에 재산이 있습니다 :

public class Ad 
{ 
    public Int32 AdTypeId { get; set; } 
    public virtual AdType AdType { get; set; } 
} 

이 관계를 설명하려면 다음을 수행하십시오.

내가 할 때 :

someAd.AdType = someAdType; 

속성은 잘 설정되어 있지만 AdTypeId가 없습니다. 걱정하지 마라. 나는 이것이 저장하는 것이 좋을 것이라고 생각할 것이기 때문에.

context.SaveChanges(); 

문제 (외래 키 문제를 일으키는) 대신는 AdTypeId 컬럼에 삽입해야하는지 파악하는 객체 할당 adType을 속성을 사용하여이 AdTypeId 열에서 0 값을 저장하려고하는이 시점에서 .

것 알아요 :이 시점 someAdType에서

  • 은/ 가 지속 인 ID가 있습니다.
  • AdType 속성이 올바르게 설정되었습니다.
  • AdTypeId가 0입니다.
  • 데이터베이스에 외래 키 관계가 있습니다.
  • AdTypeId는 기본 키입니다.
  • 내가이 지연로드를 허용하도록 설정되어 있기 때문에 난 정말 adType을 변경 시도하지 않은 사실

에/지연로드 세트를 연기했다.

답변

4

"프록시를 사용하지 않기 때문에 (예 : 해당 단어를 ... Yah)"스냅 샷 기반 변경 추적 "접근 방식은 시스템이 변경된 것이 아니라고합니다.

이 예에서 고객은 순수 POCO 유형입니다. EntityObject 또는 IPOCO 기반의 기관과는 달리, 결정은 당신의 순수한 POCO 엔티티와 엔티티 프레임 워크 사이에 자동 알림 가 없기 때문에 자동으로 가 동기화 상태 관리자를 유지하지 않는 개체에 을 변경합니다. 따라서 상태 관리자를 쿼리 할 때 시 은 이 엔터티의 속성 중 하나를 명시 적으로 변경했지만 고객 개체 상태가 이라고 생각합니다.

Got that from here

그래서 내가 SaveChanges를 메소드로 AcceptAllChangesAfterSave 옵션을 사용할 필요가 변경이있는 지 확인하기 위해 알고 있는지 확인하기 위해서입니다.

context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave); 

그리고 작동합니다. 다행스럽게도 나는 그것을 올바르게 이해하고 있습니다 ...

+1

이봐, 나는 똑같은 문제에 직면 해 있고 성공하지 못한 채로이 옵션을 저장하려고 노력했다. 필자가 아는 한, AcceptAllChangesAfterSave는 변경 사항을 감지하려고 시도하지 않고 엔티티를 Unchanged 상태로 두어 저장 후에 만 ​​AcceptChanges()를 호출합니다. 틀 렸으면 고쳐줘. –

관련 문제