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 (_sequenceGenerator == null) { _sequenceGenerator = new SequenceGenerator(); } long nextSequence = _sequenceGenerator.GetNextSequence(typeInfo, 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; }