Il motivo per cui le operazioni vengono eseguite (cioè i dati sono stati ancora inseriti dopo l'interruzione), perché le operazioni non sono contenute all'interno di una sessione transazionale.
Tutte le operazioni CRUD dovrebbero avere un metodo di overload che specifica IClientSessionHandle
come suo primo argomento. Ad esempio:
Task InsertOneAsync(IClientSessionHandle session, TDocument document, InsertOneOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
Vedere:InsertOneAsync e ReplaceOneAsync nel driver MongoDB .NET/C# v2.8.1.
Per garantire che le operazioni siano contenute all'interno della sessione transazionale, passare la sessione come argomento alle operazioni CRUD. Tutte le operazioni che non hanno l'oggetto sessione verranno eseguite al di fuori della sessione.