Exemplo n.º 1
0
        /// <summary>
        /// Begins a new transaction.
        /// </summary>
        public void BeginTransaction()
        {
            try {
                if (nestLevel == 0)
                {
                    transactionDead = false;

                    if (databaseInfo is SqlServerInfo)
                    {
                        innerTx = cn.WrappedConnection.BeginTransaction(IsolationLevel.Snapshot);
                    }
                    else if (databaseInfo is OracleInfo)
                    {
                        innerTx = cn.WrappedConnection.BeginTransaction(IsolationLevel.Serializable);
                    }
                    else
                    {
                        innerTx = cn.WrappedConnection.BeginTransaction();
                    }
                    tx = new ProfiledDbTransaction(innerTx, cn);

                    commitTimeValidationMethods = new List <Func <string> >();
                }
                else
                {
                    saveTransaction();
                }
                nestLevel++;
            }
            catch (Exception e) {
                throw createConnectionException("beginning a transaction for", e);
            }
        }
Exemplo n.º 2
0
 private void resetTransactionFields()
 {
     userTransactionId           = null;
     commitTimeValidationMethods = null;
     tx      = null;
     innerTx = null;
 }
Exemplo n.º 3
0
        public void TestProfiledDbCommandWithProfiledDbCommand()
        {
            var mockCommand    = new Mock <DbCommand>();
            var mockDbProfiler = new Mock <IDbProfiler>();

            var target = new ProfiledDbCommand(mockCommand.Object, mockDbProfiler.Object);

            // test CreateDbParameter()
            var mockParameter = new Mock <DbParameter>();

            mockCommand.Protected().Setup <DbParameter>("CreateDbParameter").Returns(mockParameter.Object);
            Assert.AreEqual(mockParameter.Object, target.CreateParameter());

            // test DbConnection
            var mockConnection     = new Mock <DbConnection>();
            var profiledConnection = new ProfiledDbConnection(mockConnection.Object, mockDbProfiler.Object);

            mockCommand.Protected().Setup <DbConnection>("DbConnection").Returns(profiledConnection);
            var connection = target.Connection;

            Assert.AreEqual(profiledConnection, connection);

            // test DbParameterCollection
            var mockParameterCollection = new Mock <DbParameterCollection>();

            mockCommand.Protected().Setup <DbParameterCollection>("DbParameterCollection").Returns(mockParameterCollection.Object);
            var parameterCollection = target.Parameters;

            Assert.AreEqual(mockParameterCollection.Object, parameterCollection);

            // test DbTransaction
            var mockTransaction     = new Mock <DbTransaction>();
            var profiledTransaction = new ProfiledDbTransaction(mockTransaction.Object, profiledConnection);

            mockCommand.Protected().Setup <DbTransaction>("DbTransaction").Returns(profiledTransaction);
            var transaction = target.Transaction;

            Assert.AreEqual(profiledTransaction, transaction);

            // test DesignTimeVisible
            var designTimeVisible1   = true;
            var designTimeVisible2   = false;
            var designTimeVisibleSet = false;

            mockCommand.Setup(cmd => cmd.DesignTimeVisible).Returns(designTimeVisible1);
            mockCommand.SetupSet(cmd => cmd.DesignTimeVisible = It.IsAny <bool>()).Callback <bool>(a =>
            {
                Assert.AreEqual(designTimeVisible2, a);
                designTimeVisibleSet = true;
            });
            Assert.AreEqual(designTimeVisible1, target.DesignTimeVisible);
            target.DesignTimeVisible = designTimeVisible2;
            Assert.IsTrue(designTimeVisibleSet);

            // test ExecuteDbDataReader()
            var mockReader     = new Mock <DbDataReader>();
            var profiledReader = new ProfiledDbDataReader(mockReader.Object, mockDbProfiler.Object);
            var cmdBehavior    = CommandBehavior.CloseConnection;

            mockCommand.Protected().Setup <DbDataReader>("ExecuteDbDataReader", cmdBehavior).Returns(profiledReader);
            var executeDbCommandCalled = false;

            mockDbProfiler.Setup(p => p.ExecuteDbCommand(It.IsAny <DbExecuteType>(), It.IsAny <IDbCommand>(), It.IsAny <Func <IDataReader> >(), It.IsAny <TagCollection>()))
            .Callback <DbExecuteType, IDbCommand, Func <IDataReader>, IEnumerable <string> >((a, b, c, d) =>
            {
                Assert.AreEqual(mockCommand.Object, b);
                c();
                executeDbCommandCalled = true;
            });
            var reader = target.ExecuteReader(cmdBehavior);

            Assert.IsTrue(executeDbCommandCalled);
            Assert.AreEqual(profiledReader, reader);

            // test Dispose()
            var disposeCalled = false;

            mockCommand.Protected().Setup("Dispose", true).Callback <bool>(a => disposeCalled = true);
            target.Dispose();
            Assert.IsTrue(disposeCalled);
        }