[Expand]General Information
[Expand]WinForms Controls
[Expand]ASP.NET Controls and MVC Extensions
[Expand]ASP.NET Bootstrap Controls
[Expand]ASP.NET Core Bootstrap Controls
[Expand]WPF Controls
[Expand]Xamarin Controls
[Expand]Windows 10 App Controls
[Expand]Office File API
[Expand]Report and Dashboard Server
[Expand]eXpressApp Framework
[Collapse]eXpress Persistent Objects
 [Expand]Product Information
 [Expand]Getting Started
 [Expand]Feature Center
   Basics of Creating Persistent Objects for Existing Data Tables
   Creating a Persistent Object
   Creating a Session
   Creating an XPCollection
   Custom Collection Types
   Deferred and Immediate Object Deletion
   Explicit Units of Work
   Filtering Basics
   Generating Persistent Objects for Existing Data Tables
   How to: Add Persistence to an Existing Hierarchy by Changing the Base Inheritance
   How to: Add Persistence to an Existing Hierarchy by Using Session-less Persistent Objects
   How to: Connect to a Data Store
   Inheritance Mapping
   Nested Units of Work
   NULL Value Handling Specifics
   Optimistic Concurrency Control
   Pageable Collections
   Property Descriptors
   Relationships Between Objects
   Saving Persistent Objects
   Simplified Criteria Syntax
   Simplified Property Syntax
   Sorting Basics
   Using Explicit Transactions
   Using Transactions
   Value Converters
   Working with Sessions
   XPCollection Concepts
   XPDataView Concepts
   XPO Classes Comparison
   XPView Concepts
 [Expand]Design-Time Features
 [Expand]Member Tables
 [Expand]API Reference
[Expand]CodeRush Classic
[Expand]Cross-Platform Core Libraries
[Expand]Tools and Utilities
 End-User Documentation
View this topic on docs.devexpress.com (Learn more)

Using Explicit Transactions

An explicit transaction represents a database transaction that is explicitly started within a Session or Unit of Work to isolate and finalize transactional changes at the database level. An explicit transaction allows you to easily manage object changes and also comes in handy in scenarios when normal transactions cannot be used for batch object updates.

XPO intrinsically starts a short explicit transaction, only to commit changes made in a transaction to a database, and then automatically closes the transaction, to avoid concurrency issues. You can manually maintain an explicit transaction within a session or unit of work using the Session.ExplicitBeginTransaction, Session.ExplicitCommitTransaction and Session.ExplicitRollbackTransaction methods as shown below.

To simplify the management of explicit transactions, Explicit Units of Work have been implemented. These units of work automatically start an explicit transaction before object changes are temporarily saved to a database for the first time. Intermediate object changes are also automatically tracked, so that you can access modified objects without having to commit the changes beforehand.

The following code snippet demonstrates how to simplify the code demonstrated above, using an explicit unit of work.


The ExplicitBeginTransaction, ExplicitCommitTransaction and ExplicitRollbackTransaction methods cannot be used with Explicit Units of Work, because they are automatically called at appropriate moments.


A Session or Unit of Work that starts an explicit transaction must be the exclusive owner of the database connection. Therefore, only one explicit transaction can be open at a time.

Is this topic helpful?​​​​​​​