Exemplo n.º 1
0
        public virtual void UseTransaction_throws_if_enlisted_in_transaction()
        {
            if (!AmbientTransactionsSupported)
            {
                return;
            }

            using (var t = new CommittableTransaction(TimeSpan.FromMinutes(10)))
            {
                using (var transaction = TestStore.BeginTransaction())
                {
                    using (var context = CreateContextWithConnectionString())
                    {
                        context.Database.OpenConnection();

                        context.Database.EnlistTransaction(t);

                        var ex = Assert.Throws <InvalidOperationException>(
                            () => context.Database.UseTransaction(transaction));
                        Assert.Equal(RelationalStrings.ConflictingEnlistedTransaction, ex.Message);
                        context.Database.CloseConnection();
                    }
                }
            }
        }
Exemplo n.º 2
0
        public virtual void UseTransaction_will_not_dispose_external_transaction()
        {
            using var transaction = TestStore.BeginTransaction();
            using var context     = CreateContext();
            context.Database.UseTransaction(transaction);

            context.Database.GetService <IRelationalConnection>().Dispose();

            Assert.NotNull(transaction.Connection);
        }
Exemplo n.º 3
0
        public virtual void UseTransaction_throws_if_mismatched_connection()
        {
            using var transaction = TestStore.BeginTransaction();
            using var context     = CreateContextWithConnectionString();
            var ex = Assert.Throws <InvalidOperationException>(
                () =>
                context.Database.UseTransaction(transaction));

            Assert.Equal(RelationalStrings.TransactionAssociatedWithDifferentConnection, ex.Message);
        }
Exemplo n.º 4
0
 public virtual void UseTransaction_throws_if_another_transaction_started()
 {
     using var transaction = TestStore.BeginTransaction();
     using var context     = CreateContextWithConnectionString();
     using (context.Database.BeginTransaction(
                DirtyReadsOccur
             ? IsolationLevel.ReadUncommitted
             : IsolationLevel.Unspecified))
     {
         var ex = Assert.Throws <InvalidOperationException>(
             () =>
             context.Database.UseTransaction(transaction));
         Assert.Equal(RelationalStrings.TransactionAlreadyStarted, ex.Message);
     }
 }
Exemplo n.º 5
0
 public virtual void UseTransaction_throws_if_another_transaction_started()
 {
     using (var transaction = TestStore.BeginTransaction())
     {
         using (var context = CreateContextWithConnectionString())
         {
             using (context.Database.BeginTransaction())
             {
                 var ex = Assert.Throws <InvalidOperationException>(
                     () =>
                     context.Database.UseTransaction(transaction));
                 Assert.Equal(RelationalStrings.TransactionAlreadyStarted, ex.Message);
             }
         }
     }
 }
Exemplo n.º 6
0
        public virtual void UseTransaction_throws_if_ambient_transaction_started()
        {
            if (!AmbientTransactionsSupported)
            {
                return;
            }

            using (TestUtilities.TestStore.CreateTransactionScope())
            {
                using var transaction = TestStore.BeginTransaction();
                using var context     = CreateContextWithConnectionString();
                var ex = Assert.Throws <InvalidOperationException>(
                    () => context.Database.UseTransaction(transaction));
                Assert.Equal(RelationalStrings.ConflictingAmbientTransaction, ex.Message);
            }
        }
Exemplo n.º 7
0
        public virtual async Task Can_use_open_connection_with_started_transaction(bool autoTransaction)
        {
            using (var transaction = TestStore.BeginTransaction())
            {
                using (var context = CreateContext())
                {
                    context.Database.AutoTransactionsEnabled = autoTransaction;

                    context.Database.UseTransaction(transaction);

                    context.Entry(context.Set <TransactionCustomer>().OrderBy(c => c.Id).First()).State = EntityState.Deleted;
                    await context.SaveChangesAsync();
                }
            }

            AssertStoreInitialState();
        }