Пример #1
0
        private void DoReadOnlyTransaction([NotNull] Action <ISession> procedure,
                                           [CanBeNull] IDetachedState detachedState)
        {
            using (ISession session = OpenSession())
            {
                // Do not set session.DefaultReadOnly = true;
                // otherwise the loaded entities remain readonly forever
                // -> this probably makes sense but would be a change in behaviour

                AssertRequiredContext(session, RequiredContext.Transaction);

                FlushMode origFlushMode = session.FlushMode;

                session.FlushMode = FlushMode.Manual;
                try
                {
                    detachedState?.ReattachState(this);

                    procedure(session);
                }
                finally
                {
                    session.FlushMode = origFlushMode;
                    //session.DefaultReadOnly = false;
                    session.Transaction.Rollback();
                    session.BeginTransaction();
                }
            }
        }
Пример #2
0
        private void Do([NotNull] Action <ISession> procedure,
                        RequiredContext requiredContext,
                        [CanBeNull] IDetachedState detachedState)
        {
            using (ISession session = OpenSession())
            {
                AssertRequiredContext(session, requiredContext);

                detachedState?.ReattachState(this);

                try
                {
                    procedure(session);
                }
                catch (Exception e)
                {
                    // Roll back, if this is the outermost transaction
                    if (session is SessionWrapper sessionWrapper &&
                        sessionWrapper.IsOutermost)
                    {
                        _msg.Debug("Rolling back nHibernate transaction due to exception.", e);

                        session.Transaction.Rollback();
                    }

                    throw;
                }
            }
        }
Пример #3
0
        public void NewTransaction(IDetachedState detachedState, Action procedure)
        {
            Assert.ArgumentNotNull(procedure, nameof(procedure));

            AssertNoExistingTransaction();

            Do(delegate { procedure(); }, RequiredContext.Transaction, detachedState);
        }
        public void ReattachState(IDetachedState detachedState)
        {
            Assert.ArgumentNotNull(detachedState, nameof(detachedState));

            detachedState.ReattachState(_unitOfWork);
        }
 public void ReattachState(IDetachedState detachedState)
 {
 }
Пример #6
0
        public void ReadOnlyTransaction(IDetachedState detachedState, Action procedure)
        {
            Assert.ArgumentNotNull(procedure, nameof(procedure));

            DoReadOnlyTransaction(delegate { procedure(); }, detachedState);
        }