2011-12-19 2 views
1

트랜잭션에서 DataContext를 통해 수행하는 많은 삽입이 있습니다. 는 I 개체 두 종류의 삽입 : A와 B를System.Data.Linq.DataContext를 통해 SQL Server에 삽입 할 때 오류가 발생했습니다.

I 같은 많은 SQL 삽입 실행 수행

db.ExecuteCommand(sql.ToString(), processedParams.ToArray()); 

테이블 B에서 별도로

INSERT INTO A (...) VALUES ('11111111-1111-1111-1111-111111111111',..) 
INSERT INTO B (...) VALUES (
    '21111111-1111-1111-1111-111111111111', 
    '11111111-1111-1111-1111-111111111111',...) 

을 A.

에 외부 키가

때로는 다음과 같은 오류가 나타납니다. 테이블 "A"의 FOREIGN KEY 제약 조건 "FK_B_A"위반. 열 "GUID".

때때로 모든 레코드가 성공적으로 DB에 삽입됩니다. 동적으로 생성 된 GUID를 제외하고 항상 데이터 묶음이 동일합니다. 그것은 B에 삽입과 같은

때로는 A.

순서는 어떻게 든 교환 할 수
+0

오류가 무엇이 잘못 되었습니까? 코드 내에서 커밋을 수행하고 있습니까? 아니면 일괄 삽입과 커밋을하고 있습니까? 트랜잭션을 통해 트랜잭션을 수행 할 때 오류가 커밋 호출 때까지 분명하지 않음을 기억하십시오. .. 하나의 삽입을하고 삽입을 시도하는 것이 무엇인지 알아 내려고 제안합니다. C# 메서드를 사용하여 생성하고 반환하는 새로운 GIUD가 일반적으로 고유 한 키이므로 하드 코딩 및 삽입을 시도하는 경우 같은 키 ... 잘 외래 키 제약 조건을 생성합니다 .. – MethodMan

+0

당신은 거기에 잘못 삽입 된 SQL 삽입 알아? 'INSERT INTO A (열 이름) VALUES (실제 값)'. 쿼리 문자열을 작성하는 위치의 코드 샘플을 사용하면이 문제를 쉽게 찾을 수 있습니다. –

+0

죄송합니다. 샘플을 쓸 때 실수입니다. 때때로 모든 레코드가 DB에 성공적으로 삽입됩니다. – gabba

답변

1

모두에게 감사드립니다.

내 서비스에서 트랜잭션 정리 프로세스에서 버그의 부작용이있었습니다. 매우 긴 트랜잭션을 롤백합니다. A의 레코드가 더 이상 존재하지 않기 때문에 테이블 A와 테이블 B에 삽입하는 사이에 정리가 발생할 때 오류가 발생합니다.

+0

다행이라고 생각합니다! 그럼이 질문을 끝내시겠습니까? – ivowiblo

4

에 삽입하기 전에 발생합니다.

먼저 insertstable A으로하고 그 후에 만 ​​insertstable B으로 보내주십시오.


또한 게시 한 삽입물이 올바르지 않은 것으로 보입니다.

예를 들어 here을 참조하십시오.

+0

당신이 옳은 것처럼 보입니다. 나는 그런 식으로 삽입하려고 노력할 것이다. – gabba

+0

프로그램을 다시 쓰고 테이블 A에 모든 삽입 작업을 수행하기 전에 모든 작업이 테이블 B에 삽입됩니다. 오류는 항상 재생산됩니다. – gabba

+0

그러나 작은 수의 레코드 (10-20) 레코드를 모두 삽입하려고하면 모든 레코드가 잘됩니다. – gabba

관련 문제