문제

이것은 빈번한 질문이어야하지만 아직 그렇지 않은 것 같습니다. 나는 메모리 내 모델을 다양한 데이터를 변경할 수있는 애플리케이션에 LINQ에서 SQL을 사용하고 있으며, 변경 사항은 비동기 처리를 위해 대기열에 배치됩니다. 그래서 나는 아직 업데이트에 대해 걱정하지 않습니다 (아직). 웹 페이지의 모달 팝업을 통해 데이터의 다양한 부분을 변경할 수 있습니다. 일부는 그리드 기반이고 다른 일부는 단지 속성입니다. 나는 포스트 백 사이클에서 살아남지 못하는 변화에 문제가 생겼다. 분명히, 나는 모든 변경이 이루어지고 사용자가 페이지를 제출할 때까지 데이터베이스에 아무것도 지속하고 싶지 않습니다.

지금까지 선택한 경로는 다음과 같습니다.

  • 지연된 하중을 비활성화했습니다
  • 루트 객체에 대한 [Serializable] 부분 클래스를 만듭니다.
  • 나는 물건을 세션에 넣고 온로드 이벤트에서 검색합니다.

이것은 원칙적으로 작동하는 것 같습니다. 그러나 세션에서 개체를 검색 한 후 어린이의 속성을 업데이트하려고 할 때

p.PhysicianSpecialties[0].physician_specialty_code = 
    ddlSpecialty.SelectedItem.Value;

이 오류가 발생합니다.

Operation is not valid due to the current state of the object.

오류는 생성 된 LINQ 세터 메소드 에서이 메소드 호출로 인해 발생합니다.

this.SendPropertyChanging();

다른 속성은 잘 업데이트됩니다.

p.PhysicianNames[0].first_name = txtFirstName.Text.ToUpper();

이것은 오류가 발생하지 않습니다.

내 질문 : 기본적으로 잘못된 트랙에 있습니까? 더 좋은 방법이 있습니까? 오류의 원인은 무엇입니까?

업데이트 : 예외는 'System.Data.linQ. ForeignKeyReferenceAleadeAradeHasValueException'입니다. 제 생각에는 나는 무언가에있다, 그러나 나는 아직 해결책을 모른다.

도움이 되었습니까?

해결책

MSDN으로부터 해결책을 얻었습니다. 문제는 더 잘 설명됩니다 이 스레드에서 내가 할 수있는 것보다, 일방적으로 연관성을 바꿀 수는 없지만, 신분증을 바꾸는 것뿐만 아니라 새로운 자식 객체를 할당함으로써 양쪽 끝에서 그것을해야한다.

p.physicianspecialties [0] .PhysicianSpecialtyLookup = db.PhysicianSpecialtyLookups.single (c => (c => (c.physician_specialty_code == ddlSpecialty.SelectedItem.Value);

다른 팁

그리고 데이터 바인딩을 사용하는 경우 어떻게해야합니까? 드롭 다운 값을 변경할 때이 오류를 던지기 시작한 데이터 그리드보기에 드롭 다운 목록이 있습니다. 이로 인해 나는 연관성을 삭제하거나 데이터 바인딩을 사용하지 않아야한다고 생각합니다.

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