Beispiel #1
0
 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();
 }
Beispiel #2
0
        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;
        }
Beispiel #3
0
 public static void Initialize(string connectionString, Type sequenceObjectType) {
     _sequenceGenerator = null;
     _sequenceObjectType = sequenceObjectType;
     _defaultDataLayer = XpoDefault.GetDataLayer(connectionString, AutoCreateOption.None);
     RegisterSequences(ApplicationHelper.Instance.Application.TypesInfo.PersistentTypes);
 }
Beispiel #4
0
        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;
        }