Docs Menu
Docs Home
/ / /
C#/.NET
/

트랜잭션

이 페이지의 내용

  • 개요
  • 방법
  • 예시
  • 추가 정보
  • API 문서

이 가이드에서는 MongoDB .NET/C# 드라이버를 사용하여 트랜잭션 을 수행하는 방법을 배울 수 있습니다. 트랜잭션 을 사용하면 트랜잭션이 커밋될 때까지 데이터를 변경하지 않는 일련의 작업을 실행할 수 있습니다. 트랜잭션에서 오류가 반환되는 경우 드라이버는 트랜잭션을 취소하고 데이터 변경 사항이 표시되기 전에 모든 데이터 변경 사항을 삭제합니다.

MongoDB에서 트랜잭션은 논리적 세션 내에서 실행됩니다. 세션은 순차적으로 실행하려는 관련 읽기 또는 쓰기 작업의 그룹입니다. 세션을 사용하면 작업 그룹에 대한 인과적 일관성을 유지하거나 ACID transaction 에서 작업을 실행할 수 있습니다. MongoDB는 작업에 예상치 못한 오류가 발생하더라도 트랜잭션 작업과 관련된 데이터의 일관성을 보장합니다.

.NET/C# 드라이버를 사용하는 경우 MongoClient 인스턴스에서 IClientSession 유형으로 새 세션을 만들 수 있습니다. 매번 새 클라이언트를 인스턴스화하는 대신 여러 세션 및 트랜잭션에 클라이언트를 재사용하는 것이 좋습니다.

경고

IClientSession을 생성한 MongoClient(또는 연결된 MongoDatabase 또는 MongoCollection)과 함께만 IClientSession을 사용합니다. 다른 MongoClient과 함께 IClientSession을 사용하면 작업 오류가 발생합니다.

MongoClient 인스턴스에서 동기 StartSession() 또는 비동기 StartSessionAsync() 메서드를 사용하여 IClientSession 를 만듭니다. 그런 다음 IClientSession 인터페이스에서 제공하는 메서드 세트를 사용하여 세션 상태를 수정할 수 있습니다. 다음 Synchronous MethodsAsynchronous Methods 탭에서 선택하여 트랜잭션을 관리하는 방법에 대해 알아보세요.

메서드
설명
StartTransaction()
Starts a new transaction, configured with the given options, on this session. Throws an exception if there is already a transaction in progress for the session. To learn more about this method, see the startTransaction() page in the Server manual.

Parameter: TransactionOptions (optional)
AbortTransaction()
Ends the active transaction for this session. Throws an exception if there is no active transaction for the session or the transaction has been committed or ended. To learn more about this method, see the abortTransaction() page in the Server manual.

Parameter: CancellationToken
CommitTransaction()
Commits the active transaction for this session. Throws an exception if there is no active transaction for the session or if the transaction was ended. To learn more about this method, see the commitTransaction() page in the Server manual.

Parameter: CancellationToken
WithTransaction()
Starts a transaction on this session and runs the given callback. To learn more about this method, see the withTransaction() page in the Server manual.

중요

예외 처리

WithTransaction()에서 사용하는 콜백 함수 내에서 예외를 포착할 때는 try-catch 블록을 종료하기 전에 예외를 다시 발생시켜야 합니다. 이렇게 하지 않으면 무한 루프가 발생할 수 있습니다. 이 경우 예외를 처리하는 방법에 대한 자세한 내용은 서버 문서의 트랜잭션을 참조하고 언어 드롭다운에서 C#을(를) 선택하여 예시를 확인하세요.


Parameters: Func <IClientSessionHandle, CancellationToken, Task<TResult>>, TransactionOptions, CancellationToken
Return Type: Task <TResult>
메서드
설명
StartTransaction()
Starts a new transaction, configured with the given options, on this session. Throws an exception if there is already a transaction in progress for the session. To learn more about this method, see the startTransaction() page in the Server manual.

Parameter: TransactionOptions (optional)
AbortTransactionAsync()
Ends the active transaction for this session. Throws an exception if there is no active transaction for the session or the transaction has been committed or ended. To learn more about this method, see the abortTransaction() page in the Server manual.

Parameter: CancellationToken
Return Type: Task
CommitTransactionAsync()
Commits the active transaction for this session. Throws an exception if there is no active transaction for the session or if the transaction was ended. To learn more about this method, see the commitTransaction() page in the Server manual.

Parameter: CancellationToken
Return Type: Task
WithTransactionAsync()
Starts a transaction on this session and runs the given callback. To learn more about this method, see the withTransaction() page in the Server manual.

중요

예외 처리

WithTransactionAsync()에서 사용하는 콜백 함수 내에서 예외를 포착할 때는 try-catch 블록을 종료하기 전에 예외를 다시 발생시켜야 합니다. 이렇게 하지 않으면 무한 루프가 발생할 수 있습니다. 이 경우 예외를 처리하는 방법에 대한 자세한 내용은 서버 문서의 트랜잭션을 참조하고 언어 드롭다운에서 C#을(를) 선택하여 예시를 확인하세요.


Parameters: Func <IClientSessionHandle, CancellationToken, Task<TResult>>, TransactionOptions, CancellationToken
Return Type: Task <TResult>

이 예시에서는 다음 단계를 통해 세션을 생성하고, 트랜잭션을 생성하고, 트랜잭션 내의 여러 컬렉션에 문서를 삽입하는 방법을 보여줍니다.

  1. StartSession() 메서드를 사용하여 클라이언트에서 세션을 만듭니다.

  2. StartTransaction() 메서드를 사용하여 트랜잭션을 시작합니다.

  3. booksfilms 컬렉션에 문서를 삽입합니다.

  4. CommitTransaction() 메서드를 사용하여 트랜잭션을 커밋합니다.

var books = database.GetCollection<Book>("books");
var films = database.GetCollection<Film>("films");
// Begins transaction
using (var session = mongoClient.StartSession())
{
session.StartTransaction();
try
{
// Creates sample data
var book = new Book
{
Title = "Beloved",
Author = "Toni Morrison",
InStock = true
};
var film = new Film
{
Title = "Star Wars",
Director = "George Lucas",
InStock = true
};
// Inserts sample data
books.InsertOne(session, book);
films.InsertOne(session, film);
// Commits our transaction
session.CommitTransaction();
}
catch (Exception e)
{
Console.WriteLine("Error writing to MongoDB: " + e.Message);
return;
}
// Prints a success message if no error thrown
Console.WriteLine("Successfully committed transaction!");
}
Successfully committed transaction!

이 가이드에 언급된 개념에 대해 자세히 알아보려면 서버 매뉴얼의 다음 페이지를 참조하세요.

이 가이드에서 설명하는 유형 또는 메서드에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

돌아가기

GUID