TransactionScope를 사용하여 하나의 데이터베이스에 개체의 데이터를 추가하고 있습니다.관련 삽입이 transationscope에서 실패 함
의사 코드 :
using (TransactionScope trx = new TransactionScope())
{
SqlConnection con = DL.GetNewConn();
int newParentRecordID = InsertParentIntoTableA(object parent, con);
foreach(obj child in parent.childrenObjects)
{
child.ParentID = newParentRecordID ;
int newChildRecordID = InsertChildIntoTableB(object child, con);
}
trx.Complete();
}
내가 TableB의에서 ParentID이 TableA의에서 일치하는 기본 키 항목이없는 것을있는 오류와 InsertChildIntoTableB()에서 예외가.
연결이 다시 사용됩니다.
어떻게이 문제를 해결할 수 있습니까? TableA에서 SELECT WITH (NOLOCK)을 수행하면 새로 삽입 된 상위 레코드가 표시되지만 다음 하위 레코드 삽입에서는이를 볼 수 없습니다.
명확한 설명 편집 : foreach
루프에는 이미 삽입되었지만 커밋되지 않은 새 ParentID가 있습니다. 부모 TableA에 대한 TableB의 FK가 커밋되지 않은 새 TableA PK ID를 볼 수 없으므로 하위 TableB에 대한 삽입이 실패하는 것이 문제입니다.
예 - 좋은 관찰 – RichardOD
나는 의사 코드로 남겨 두었습니다. 당신의보기 쾌락을 위해 조정. – callisto
이것은 예상되는 해결책을 제공하지 않습니다. 이것은 받아 들여진 대답이되어서는 안됩니다. – LittleBit