EF6 데이터 컨텍스트 SqlBulkCopy insrt 큰 데이터 후 stackoverflow 예외를 throw합니다.

entity-framework-6 sqlbulkcopy wpf

문제

나는 상황을 가지고있다.

  1. 테이블 T1이있는 SQL Server 2014 데이터베이스
  2. 테이블 T1에서 데이터를 유지 관리하는 EF6이있는 WPF 응용 프로그램.

응용 프로그램이 정상적으로 실행 중입니다.

응용 프로그램이 시작되면 테이블 T1이 비어 있으면 (0 레코드) SqlBulkCopy를 사용하여 T1에 5000 개의 레코드를 삽입하여 트리거를 트리거하고 제약 조건을 확인하도록합니다. 결과는 다음과 같습니다.

  1. 테이블 T1은 5000 개의 레코드로 채워집니다.
  2. 모든 트리거가 실행되고 제약 조건이 점검되었으며 위반 사항이 위반되지 않았습니다.
  3. 문제는 SqlBulkCopy.WriteToServer가 완료된 후 context.T1이 열거 된 후에 충돌이 발생하여 StackOverfolow 예외가 발생한다는 것입니다.

나는 컨텍스트를 초기화하려고 시도했지만 성공하지는 못했다.

이 절차는 두 가지 경우에 성공합니다.

  1. 응용 프로그램이 닫히고 다시 실행되면 컨텍스트가 T1을 성공적으로 읽습니다.
  2. T1에 적어도 하나의 레코드가있는 모든 단계가 적용된 경우 (앱이 비어 있지 않은 T1 표에서 시작됨)

무엇이 StackOverflow 예외를 일으킬 수 있습니다.

인기 답변

좋아, 문제 해결, 다른 사람이 비슷한 오류가 발생할 경우를 대비해서, 나는 나의 해결책을 공유 할 것이다.

EDM에서 데이터베이스의 엔티티를 생성 할 수 있도록 T4 템플릿을 수정했습니다.

  1. INotifyPropertyChanged를 구현합니다.

  2. INotifyDataErrorInfo를 구현하고 메타 데이터 별도 클래스의 유효성 검사 규칙을 확인하여 DataAnnotations를 사용하여 데이터 유효성 검사를 적용합니다.

이로 인해 StackOverFlow 예외가 발생했습니다.

속성 유효성 검사를 비활성화하면 문제가 해결됩니다.

따라서 WriteToServer가 진행되는 동안 데이터 유효성 검사는 SqlBulkCopy로 환영받지 못합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.