Back to Devexpress

ThreadSafeDataLayer Class

xpo-devexpress-dot-xpo-9c401f34.md

latest4.3 KB
Original Source

ThreadSafeDataLayer Class

Implements a data layer that allows multiple threads to access data in a data store at the same time.

Namespace : DevExpress.Xpo

Assembly : DevExpress.Xpo.v25.2.dll

NuGet Package : DevExpress.Xpo

Declaration

csharp
public class ThreadSafeDataLayer :
    BaseDataLayer,
    ICommandChannel,
    IDataLayerAsync,
    IDataLayer,
    IDisposable,
    IDataLayerProvider,
    IXPDictionaryProvider,
    ICommandChannelAsync
vb
Public Class ThreadSafeDataLayer
    Inherits BaseDataLayer
    Implements ICommandChannel,
               IDataLayerAsync,
               IDataLayer,
               IDisposable,
               IDataLayerProvider,
               IXPDictionaryProvider,
               ICommandChannelAsync

Remarks

This class implements a data access layer that allows multiple threads to access data in a data store at the same time. See the Data Access Layer concept for more information on using data access layers.

Note

Before performing any operations with persistent objects in a data store using thread-safe data access layers, call the Session.CreateObjectTypeRecords method to obtain complete metadata information on the persistent objects.

How to resolve ‘Cannot modify Dictionary because ThreadSafeDataLayer uses it’

Example

The following code demonstrates how to initialize the ThreadSafeDataLayer component. The XPDictionary.GetDataStoreSchema method is called to force creating the persistent class metadata information in advance. This is a required step.

The XPDictionary.GetDataStoreSchema method allows you to specify the array of class types or assemblies where persistent classes are declared. In this example, it is assumed that all persistent classes are declared in the assembly that contains the code that is currently being executed.

csharp
private static IDataLayer GetDataLayer() {
   XpoDefault.Session = null;
   string conn = ConfigurationManager.ConnectionStrings["ConnectionStringName"].ConnectionString;
   conn = XpoDefault.GetConnectionPoolString(conn);
   XPDictionary dict = new ReflectionDictionary();
   IDataStore store = XpoDefault.GetConnectionProvider(conn, AutoCreateOption.SchemaAlreadyExists);
    dict.GetDataStoreSchema(System.Reflection.Assembly.GetExecutingAssembly());
   IDataLayer dl = new ThreadSafeDataLayer(dict, store);
   return dl;
}
vb
Private Shared Function GetDataLayer() As IDataLayer
   XpoDefault.Session = Nothing
   Dim conn As String = ConfigurationManager.ConnectionStrings("ConnectionStringName").ConnectionString
   conn = XpoDefault.GetConnectionPoolString(conn)
   Dim dict As XPDictionary = New ReflectionDictionary()
   Dim store As IDataStore = XpoDefault.GetConnectionProvider(conn, AutoCreateOption.SchemaAlreadyExists)
    dict.GetDataStoreSchema(System.Reflection.Assembly.GetExecutingAssembly())
   Dim dl As IDataLayer = New ThreadSafeDataLayer(dict, store)
   Return dl
End Function

Implements

IDataLayerAsync

IDataLayer

Inheritance

Object DevExpress.Xpo.Helpers.BaseDataLayer ThreadSafeDataLayer

Extension Methods

Query<T>()

See Also

ThreadSafeDataLayer Members

CreateObjectTypeRecords

DevExpress.Xpo Namespace