Dapper.net 거래 문제

asp.net dapper orm sql-server-2008

문제

내 SQL Server 2008 데이터베이스에 트랜잭션을 커밋하려고 해요 - 첫 번째로 2 insert의 다음에 몇 개의 업데이트가 있지만, 첫 번째 업데이트를 실행하려고하자마자 다음 오류가 발생합니다.

ExecuteNonQuery는 명령에 할당 된 연결이 보류중인 로컬 트랜잭션에있을 때 명령에 트랜잭션이 있어야합니다. 명령의 Transaction 속성이 초기화되지 않았습니다.

코드는 간략하게하기 위해 약간 수정했습니다.

using (_cn)
{
    _cn.Open();
    IDbTransaction transaction = _cn.BeginTransaction();
    topicId = (int)_cn.Query<decimal>(qAddTopic, new { pForumId = topic.ForumId }, transaction).Single();
    postId = (int)_cn.Query<decimal>(qAddPost, new { pTopicId = topicId }, transaction).Single();

    _cn.Execute(qUpdateForums, new { pLastPostId = postId });
    _cn.Execute((qUpdateSiteTotals));

    transaction.Commit();
}

처음 2 개의 인서트는 정상적으로 작동하지만 업데이트 중 하나를 수행하자 마자 아무런 기쁨도 얻지 못합니다.

수락 된 답변

문제를 발견했습니다. 업데이트를 호출 할 때 트랜잭션 매개 변수가 누락 된 것입니다. 반면에 이전의 삽입이 제대로 작동하면 IDbTransaction 매개 변수가 포함되었습니다! 내 잘못이야!

예:

Connection.Query<Entitiy>("sqlQuery",param: new { id= ID}, transaction: Transaction)

인기 답변

가능한 경우 데이터베이스 IDbTransaction에 대해 TransactionScope를 사용하는 것이 좋습니다. 다음 코드는 SQL과 관리되는 공급자에 아무런 문제가 없다고 가정하면 정상적인 트랜잭션에서 자동으로 등록됩니다. 정상적으로 작동하는 공급자는 수행해야합니다.

using (var ts = new TransactionScope())
{
  using (_cn)
  {
    _cn.Open();
    ...
  }

  ts.complete();
}



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