문제

SaveChanges를 사용할 때 많은 관계가 저장되고 다음을 얻지 못하도록 속성을 설정 해야하는 방법은 다음과 같습니다. 삽입 명령문은 외국의 주요 제약 조건과 충돌했습니다 ... 오류.

매우 간단합니다. 광고와 Adtype가 있습니다. AD에는 속성이 있습니다.

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

이 관계를 다루기 위해.

내가 이것을 할 때 :

someAd.AdType = someAdType;

속성은 잘 설정되어 있지만 Adtypeid는 아닙니다. 나는 이것이 저축해도 괜찮을 것이라고 가정하기 때문에 걱정할 필요는 없습니다.

context.SaveChanges();

문제는이 시점에서 AdType 속성을 사용하여 Adtypeid 열에 삽입 해야하는 내용을 파악하는 대신 Adtypeid 열 (외국 키 문제를 일으키기)에서 0 값을 저장하려고합니다.

내가 아는 것 :

  • 이 시점에서 someadtype는 지속/ID가 있습니다.
  • ADTYPE 속성이 올바르게 설정됩니다.
  • Adtypeid는 0입니다.
  • 데이터베이스에는 외국의 주요 관계가 있습니다.
  • Adtypeid는 주요 키입니다.
  • 나는 연기/게으른 하중이 True로 설정되었습니다

게으른 하중을 허용하기 위해 설정 되었기 때문에 Adtype를 변경하려고 시도하지 않았습니다.

도움이 되었습니까?

해결책

OK는 비 프록스 (Word Up ... Yah)를 사용하고 있기 때문에 "스냅 샷 기반 변경 추적"접근 방식을 사용하고 있기 때문에 시스템은 변경되었음을 알 수 없습니다.

이 예에서 고객은 순수한 POCO 유형입니다. EntityObject 또는 Ipoco 기반 엔티티와 달리 엔티티를 변경한다고해서 순수한 POCO 엔티티와 엔터티 프레임 워크간에 자동 알림이 없기 때문에 상태 관리자를 자동으로 유지하지는 않습니다. 따라서 주 관리자를 쿼리 할 때 엔티티의 속성 중 하나를 명시 적으로 변경 했음에도 불구하고 고객 객체 상태는 변경되지 않았다고 생각합니다.

여기에서 얻었습니다

따라서 변화가 있는지 확인하기 위해 확인하기 위해 AcceptallchangesAftersave SaveChanges 메소드가있는 옵션.

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

그리고 그것은 작동합니다. 잘만되면 나는 그것을 올바르게 이해합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top