이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 23237|회답: 1

[출처] 엔터티 프레임워크에서의 대량 제출 및 트랜잭션 처리

[링크 복사]
게시됨 2017. 4. 8. 오후 10:10:01 | | |

Entity Framework에서 SaveChanges()의 사용은 매우 자주 이루어지며, 단일 데이터 수정 또는 삭제 후 SaveChanges()를 호출하면 영향 레코드 수가 반환됩니다.

데이터 배치 수정이나 배치 삭제를 사용하려면 SaveChanges(false)+AcceptAllChanges() 메서드가 필요합니다.



SaveChanges(false)는 EF가 데이터베이스에 대해 연산을 수행해야 한다는 알림일 뿐이며, 메모리에 대기 중이며 필요할 때 되돌릴 수 있습니다. 예를 들어 AcceptAllChange() 커밋이 진정으로 성공하면 EF가 SaveChanges(false) 작업을 되돌릴 수 있습니다.



분산 트랜잭션 작업을 처리할 때는 TransactionScope를 사용해야 하며, 우리는 종종 이렇게 작성합니다:


하지만 이런 글쓰기는 위험하고 거짓입니다
예를 들어, 문맥1. SaveChanges() 성공, context2. SaveChanges()는 문제가 있습니다. 우리는 범위 내에 있습니다. 트랜잭션이 커밋되고 Context1이 성공적으로 실행되면 Complete()가 종료됩니다

(제 실습에서는, 위에서 언급한 것들은 상황에 따라 정상적으로 되돌릴 수 있습니다. SaveChanges() 성공, context2. SaveChanges()는 문제가 있어서 둘 다 제대로 실행되지 않습니다!
프로젝트에서 Using System.Transaction 네임스페이스를 참조하세요. 트랜잭션스코프를 정의하는 것은 사물의 범위를 정의하는 것과 같으며, 즉 이 거래의 범위가 사용 범위 내에 있다는 뜻입니다. 사용 범위에서, 범위가 없다면. Complete() 명령어를 누르면 스코프가 모든 연산을 소멸하면 자동으로 롤백합니다. )

이것이 반드시 우리의 필요를 충족시키지는 않을 수 있습니다. 만약 context1과 context2가 동시에 성공적으로 실행되어야 하거나 둘 다 성공하지 못한다면, 다음과 같은 코드를 약간 조정해야 합니다:



우리는 SaveChanges(false)를 사용해 데이터베이스에 필요한 연산 명령을 먼저 전송합니다. 즉, context1과 context2는 사실상 변경되지 않았음을 확인하기 위함입니다. 트랜잭션이 종료되고 자동으로 롤백되면 두 변경 사항이 데이터베이스에 실제로 커밋되지 않으므로 성공적으로 롤백할 수 있습니다.




이전의:EF6는 트랜잭션을 관리하기 위해 Database.BeginTransaction을 사용합니다
다음:EF ORM 개발 및 사용 시리즈 튜토리얼
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com