AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

C#でのトランザクションの使用

このガイドでは、MongoDB .NET/C# ドライバーを使用してトランザクションを実行する方法を学習できます。 トランザクションを使用すると、トランザクションがコミットされるまでデータを変更しない一連の操作を実行できます。 トランザクション内のいずれかの操作でエラーが返された場合、ドライバーはトランザクションをキャンセルし、変更が反映される前にすべてのデータ変更を破棄します。

MongoDB では、トランザクションは論理セッション内で実行されます。セッションは、順番に実行されるよう関連付けられた読み取り操作または書き込み操作のグループです。セッションにより、一連の操作に対する因果整合性が有効になる、または ACID transaction 内で操作を実行できるようになります。MongoDBは、トランザクション操作で予期せぬエラーが発生した場合でも、その操作に関わるデータの一貫性が保たれることを保証します。

.NET/C# ドライバーを使用すると、 MongoClientインスタンスからIClientSession型の新しいセッションを作成できます。 毎回新しいクライアントをインスタンス化するのではなく、クライアントを複数のセッションやトランザクションで再利用することを推奨します。

警告

IClientSessionは、それを作成したMongoClient (または関連付けられたMongoDatabaseまたはMongoCollection )でのみ使用します。 IClientSessionと別のMongoClientを使用すると、操作エラーが発生します。

IClientSessionインスタンスで同期StartSession() メソッドまたは非同期StartSessionAsync() メソッドのいずれかを使用してMongoClient を作成します。次に、 IClientSessionインターフェースが提供するメソッドセットを使用してセッション状態を変更します。 トランザクションを管理する方法については、次の Synchronous Methodsタブと タブから選択してください。Asynchronous Methods

方式
説明

StartTransaction()

このセッションで、指定されたオプションで構成された新しいトランザクションを開始します。セッションで既にトランザクションが進行中の場合は例外がスローされます。このメソッドの詳細については、サーバー マニュアルの「startTransaction() ページ」を参照してください。

パラメータ: TransactionOptions (任意)

AbortTransaction()

このセッションのアクティブなトランザクションを終了します。セッションにアクティブなトランザクションがない場合、またはトランザクションがコミットされたか終了した場合は、例外がスローされます。このメソッドの詳細については、サーバー マニュアルの abortTransaction() ページを参照してください。

パラメータ: CancellationToken

CommitTransaction()

このセッションのアクティブなトランザクションをコミットします。セッションにアクティブなトランザクションがない場合、またはトランザクションが終了した場合は例外がスローされます。このメソッドの詳細については、サーバー マニュアルの commitTransaction() ページを参照してください。

パラメータ: CancellationToken

WithTransaction()

このセッションでトランザクションを開始し、指定されたコールバックを実行します。 このメソッドの詳細については、サーバー マニュアルのwithTransaction() ページを参照してください。

重要: WithTransaction()で使用されるコールバック関数内で例外をキャッチする場合は、試行ブロックを終了する前に例外を再スローする必要があります。それに失敗すると、無限ループが発生する可能性があります。 この場合の例外の処理方法の詳細については、サーバー マニュアルの「C# トランザクション 」を参照し、例のを表示するには言語ドロップダウンから を選択します。


パラメーター: Func <IClientSessionHandle, CancellationToken, Task<TResult>>TransactionOptionsCancellationToken
戻り値の型: Task <TResult>

方式
説明

StartTransaction()

このセッションで、指定されたオプションで構成された新しいトランザクションを開始します。セッションで既にトランザクションが進行中の場合は例外がスローされます。このメソッドの詳細については、サーバー マニュアルの「startTransaction() ページ」を参照してください。

パラメータ: TransactionOptions (任意)

AbortTransactionAsync()

このセッションのアクティブなトランザクションを終了します。セッションにアクティブなトランザクションがない場合、またはトランザクションがコミットされたか終了した場合は、例外がスローされます。このメソッドの詳細については、サーバー マニュアルの abortTransaction() ページを参照してください。

パラメータ: CancellationToken
戻り値の型: Task

CommitTransactionAsync()

このセッションのアクティブなトランザクションをコミットします。セッションにアクティブなトランザクションがない場合、またはトランザクションが終了した場合は例外がスローされます。このメソッドの詳細については、サーバー マニュアルの commitTransaction() ページを参照してください。

パラメータ: CancellationToken
戻り値の型: Task

WithTransactionAsync()

このセッションでトランザクションを開始し、指定されたコールバックを実行します。 このメソッドの詳細については、サーバー マニュアルのwithTransaction() ページを参照してください。

重要: WithTransactionAsync()で使用されるコールバック関数内で例外をキャッチする場合は、試行ブロックを終了する前に例外を再スローする必要があります。それに失敗すると、無限ループが発生する可能性があります。 この場合の例外の処理方法の詳細については、サーバー マニュアルの「C# トランザクション 」を参照し、例のを表示するには言語ドロップダウンから を選択します。


パラメーター: Func <IClientSessionHandle, CancellationToken, Task<TResult>>TransactionOptionsCancellationToken
戻り値の型: Task <TResult>

個別のトランザクションを構成するには、TransactionOptionsインスタンスを StartTransaction() メソッドまたは WithTransaction() メソッドに渡します。このセクションの例では、読み取り保証 (read concern)を ReadConcern.Majority に設定し、書込み保証 (write concern)をWriteConcern.WMajority に設定します。

次のプロパティを持つ TransactionOptionsオブジェクトを構成できます。

プロパティ
説明

MaxCommitTime

1 つの commitTransaction コマンドが実行することができる最大時間。コミットがこの制限を超えると、MongoDB Server は MaxTimeMSExpired エラーを返し、トランザクションをコミットしません。

このプロパティを省略すると、MongoDB Server は「デフォルトのトランザクションランタイム制限」を適用します。

データ型: TimeSpan?

ReadConcern

トランザクションの読み取り保証 (read concern)。詳細を学ぶには、MongoDB Serverマニュアルの「読み取り保証 (read concern)」を参照してください。

データ型: ReadConcern

ReadPreference

トランザクションの読み込み設定(read preference)。詳細については、MongoDB Serverマニュアルの 読み込み設定(read preference) を参照してください。

データ型: ReadPreference

WriteConcern

トランザクションの書込み保証 (write concern)。詳細については、MongoDB Server マニュアルの「書込み保証 (write concern)」を参照してください。

データ型: WriteConcern

この例では、次の手順でセッションを作成し、トランザクションオプションを構成し、トランザクションを作成し、トランザクション内の複数のコレクションにドキュメントを挿入する方法を示します。

  1. StartSession()メソッドを使用してクライアントからセッションを作成します。

  2. トランザクションを構成するには、TransactionOptionsオブジェクトを作成します。

  3. トランザクションを開始するには、 StartTransaction() メソッドを使用します。

  4. booksfilmsコレクションと コレクションにドキュメントを挿入します。

  5. CommitTransaction()メソッドを使用してトランザクションをコミットします。

var books = database.GetCollection<Book>("books");
var films = database.GetCollection<Film>("films");
// Begins transaction
using (var session = mongoClient.StartSession())
{
// Configures transaction options
var transactionOptions = new TransactionOptions(
readConcern: ReadConcern.Majority,
writeConcern: WriteConcern.WMajority
);
session.StartTransaction(transactionOptions);
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!

注意

並列操作はサポートされていません

.NET/ C#ドライバーは、単一のトランザクション内での並列操作の実行中をサポートしていません。

このガイドで言及されている概念の詳細については、サーバー マニュアルの次のページを参照してください。

このガイドで説明した型やメソッドの詳細については、次の API ドキュメントを参照してください。