public static void SetNextSequence(ITypeInfo typeInfo, string prefix, long nextId) { if (_sequenceGenerator == null) _sequenceGenerator = new SequenceGenerator(); var objectByKey = _sequenceGenerator._explicitUnitOfWork.FindObject(_sequenceObjectType, GetCriteria(typeInfo.FullName,prefix), true); _sequenceGenerator._sequence = objectByKey != null ? (ISequenceObject)objectByKey : CreateSequenceObject(prefix + typeInfo.FullName, _sequenceGenerator._explicitUnitOfWork); _sequenceGenerator._sequence.NextSequence = nextId; _sequenceGenerator._explicitUnitOfWork.FlushChanges(); _sequenceGenerator.Accept(); }
public static void GenerateSequence(ISupportSequenceObject supportSequenceObject, ITypeInfo typeInfo) { if (_defaultDataLayer == null) return; if (supportSequenceObject.Session is NestedUnitOfWork || !supportSequenceObject.Session.IsNewObject(supportSequenceObject)) return; if (_sequenceGenerator == null) _sequenceGenerator = new SequenceGenerator(); long nextSequence = _sequenceGenerator.GetNextSequence(typeInfo, supportSequenceObject.Prefix); Session session = supportSequenceObject.Session; if (IsNotNestedUnitOfWork(session)) { SessionManipulationEventHandler[] sessionOnAfterCommitTransaction = { null }; sessionOnAfterCommitTransaction[0] = (sender, args) => { if (_sequenceGenerator != null) { try { _sequenceGenerator.Accept(); } finally { session.AfterCommitTransaction -= sessionOnAfterCommitTransaction[0]; } } }; session.AfterCommitTransaction += sessionOnAfterCommitTransaction[0]; } supportSequenceObject.Sequence = nextSequence; }
public static void Initialize(string connectionString, Type sequenceObjectType) { _sequenceGenerator = null; _sequenceObjectType = sequenceObjectType; _defaultDataLayer = XpoDefault.GetDataLayer(connectionString, AutoCreateOption.None); RegisterSequences(ApplicationHelper.Instance.Application.TypesInfo.PersistentTypes); }
public static void GenerateSequence(ISupportSequenceObject supportSequenceObject) { if (_sequenceGenerator == null) _sequenceGenerator = new SequenceGenerator(); long nextSequence = _sequenceGenerator.GetNextSequence(supportSequenceObject.ClassInfo, supportSequenceObject.Prefix); Session session = supportSequenceObject.Session; if (!(session is NestedUnitOfWork)) { SessionManipulationEventHandler[] sessionOnAfterCommitTransaction = { null }; sessionOnAfterCommitTransaction[0] = (sender, args) => { if (_sequenceGenerator != null) { try { _sequenceGenerator.Accept(); } finally { session.AfterCommitTransaction -= sessionOnAfterCommitTransaction[0]; _sequenceGenerator.Dispose(); _sequenceGenerator = null; } } }; session.AfterCommitTransaction += sessionOnAfterCommitTransaction[0]; } supportSequenceObject.Sequence = nextSequence; }