using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Xpo;
using DevExpress.Xpo;
using System;
using System.Linq;
public static class XpoHelper
{
private static System.Reflection.Assembly[] _assemblies;
public static void Register(params System.Reflection.Assembly[] assemblies)
{
_assemblies = assemblies;
}
public static Session GetNewSession()
{
var session = new Session(DataLayer);
session.TrackPropertiesModifications = false;
return session;
}
public static UnitOfWork GetNewUnitOfWork()
{
return new UnitOfWork(DataLayer);
}
public static XPObjectSpaceProvider ObjectSpaceProvider { get; private set; }
public static IObjectSpace DefaultObjectSpace { get; private set; }
public static IDataLayer DataLayer { get; private set; }
public static IDataLayer CreateDataLayer(string connectionString)
{
if (_assemblies == null) throw new Exception("XpoHelper.types is null. Please use XpoHelper.Register before using any other function from the XpoHelper class.");
const int maxConnections = 3;
var connectionPoolString = XpoDefault.GetConnectionPoolString(connectionString, maxConnections);
var dataStoreProvider = new ConnectionStringDataStoreProvider(connectionPoolString, true);
var allTypes = _assemblies.SelectMany(a => a.GetTypes().Where(x => typeof(XPBaseObject).IsAssignableFrom(x))).ToList();
var xpoTypeInfoSource = XpoTypesInfoHelper.GetXpoTypeInfoSource();
allTypes.ForEach(x => xpoTypeInfoSource.RegisterEntity(x));
var typesInfo = XpoTypesInfoHelper.GetTypesInfo();
ObjectSpaceProvider = new XPObjectSpaceProvider(dataStoreProvider, typesInfo, xpoTypeInfoSource, true);
DefaultObjectSpace = ObjectSpaceProvider.CreateObjectSpace();
DataLayer = ObjectSpaceProvider.DataLayer;
return DataLayer;
}
}821600cookie-checkDevExpress XpoHelper Connection Register Types