>source

Oracle에 두 개의 테이블이 있습니다. 그중 하나는 MtcUnverified 초는 MtcExit입니다.

private bool Verify(Mtcexittran mtcExitTran)
{
    try
    {
        var mtcUnverified = _centraldbContext.Mtcunverifiedtran.FirstOrDefault(a => a.Transactionid.Equals(mtcExitTran.Transactionid));
        if (mtcUnverified == null)
        {
            return false;
        }
        _centraldbContext.Mtcunverifiedtran.Remove(mtcUnverified);
        _centraldbContext.Mtcexittran.Add(mtcExitTran);
        _centraldbContext.SaveChanges();
        return true;
    }
    catch (Exception ex)
    {
       
        return false;
    }
}

내 목표는 mtcunverified 테이블에서 레코드를 삭제하고 mtcexit 테이블에 삽입하는 것입니다. 이 코드에서 transactionscope를 사용해야합니까? 레코드가 mtcunverified 테이블에서 삭제되고 mtcexit에 삽입되지 않을 가능성이 있습니까? mtcexit에 레코드를 추가 할 수없는 경우 mtcunverified 테이블에서 삭제를 롤백하고 싶습니다. savechanges 메소드가 이미 시작 트랜잭션을 작성 중입니다. 따라서 두 프로세스 중 하나라도 문제가 있다면 savechanges가 두 프로세스를 롤백 할 것이라고 생각합니다. 아니면 transactionscope를 사용해야합니까? 당신의 도움을 주셔서 감사합니다.


  • 답변 # 1

    문서의 "데이터/트랜잭션 저장"아래에

    By default, if the database provider supports transactions, all changes in a single call to SaveChanges are applied in a transaction. If any of the changes fail, then the transaction is rolled back and none of the changes are applied to the database. This means that SaveChanges is guaranteed to either completely succeed, or leave the database unmodified if an error occurs.

    For most applications, this default behavior is sufficient. You should only manually control transactions if your application requirements deem it necessary.

    따라서 트랜잭션을 사용하여 EF를 중지하기위한 작업을 수행하지 않은 경우 기본값은 괜찮습니다.

    더 고급 트랜잭션 제어를 원하면 트랜잭션이 여러 호출에 걸쳐 SaveChanges , 롤백 할 수있는 "savepoints"와 함께 문서의 동일한 부분에 설명되어 있습니다.

  • 이전 reactjs - BaseWeb의 파일 업 로더 버튼 레이블 텍스트 재정의
  • 다음 c# - CSVHelper 값을 MapClass에 전달