Exemple #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();
        }
Exemple #2
0
        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;
        }