ASP.NET의 LINQ에서 SQL, AJAX POSTBACKS 및 페이지 상태
-
03-07-2019 - |
문제
이것은 빈번한 질문이어야하지만 아직 그렇지 않은 것 같습니다. 나는 메모리 내 모델을 다양한 데이터를 변경할 수있는 애플리케이션에 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);
다른 팁
그리고 데이터 바인딩을 사용하는 경우 어떻게해야합니까? 드롭 다운 값을 변경할 때이 오류를 던지기 시작한 데이터 그리드보기에 드롭 다운 목록이 있습니다. 이로 인해 나는 연관성을 삭제하거나 데이터 바인딩을 사용하지 않아야한다고 생각합니다.