public void Should_Be_Able_To_Rollback_Async_Transaction() { var expected = SqlInitialModel; using (var trans = TransactionFactory.NewTransaction()) { var ctx = SqlContext; trans.EnlistSqlResourceManager(() => ctx.GetConnection()); var toTry = new SimpleModel { Id = expected.Id, Name = expected.Name, Number = expected.Number + 1 }; toTry.Should().NotBe(expected); Task.Factory.StartNew( () => { ctx.Update(toTry); }); trans.Rollback(); } var results = SqlContext.Simple.ToList(); results.Count.Should().Be(1); results.First().Should().Be(expected); }
public void Should_Be_Able_To_Commit_NoSql_Transaction() { var initial = NoSqlInitialModel; using (var trans = TransactionFactory.NewTransaction()) { var rm = trans.EnlistNosqlResourceManager(); var toTry = new SimpleModel { Id = initial.Id, Name = initial.Name, Number = 10 }; toTry.Should().NotBe(initial); rm.Add(() => NoSqlContext.Simple.Update(toTry), () => NoSqlContext.Simple.Update(initial)); trans.Commit(); } var results = NoSqlContext.Simple.FindAll().ToList(); results.Count.Should().Be(1); results.First().Should().NotBe(initial); results.First().Number.Should().Be(10); }
public void Should_Be_Able_To_Rollback_Serialized_Transaction() { var expected = NoSqlInitialModel; using (var trans = TransactionFactory.NewTransaction()) { var transToken = trans.ChildTransaction().ToToken(); var deserializedTrans = TransactionFactory.FromToken(transToken); var rm = deserializedTrans.EnlistNosqlResourceManager(); var toTry = new SimpleModel { Id = expected.Id, Name = expected.Name, Number = expected.Number + 1 }; toTry.Should().NotBe(expected); rm.Add(() => NoSqlContext.Simple.Update(toTry), () => NoSqlContext.Simple.Update(expected)); trans.Rollback(); } var results = NoSqlContext.Simple.FindAll().ToList(); results.Count.Should().Be(1); results.First().Should().Be(expected); }
public void Should_Be_Able_To_Rollback_Parent_Transaction() { var sqlExpected = SqlInitialModel; var nosqlExpected = NoSqlInitialModel; using (var trans = TransactionFactory.NewTransaction()) { var sqlTry = new SimpleModel { Id = sqlExpected.Id, Name = sqlExpected.Name + "-" + sqlExpected.Name, Number = sqlExpected.Number + 10 }; sqlTry.Should().NotBe(sqlExpected); var nosqlTry = new SimpleModel { Id = nosqlExpected.Id, Name = nosqlExpected.Name + "-" + nosqlExpected.Name, Number = nosqlExpected.Number + 10 }; nosqlTry.Should().NotBe(nosqlExpected); var nosqlTrans = trans.ChildTransaction(); var nosqlRm = nosqlTrans.EnlistNosqlResourceManager(); nosqlRm.Add(() => NoSqlContext.Simple.Update(nosqlTry), () => NoSqlContext.Simple.Update(nosqlExpected)); nosqlTrans.Complete(); var sqlTrans = trans.ChildTransaction(); sqlTrans.EnlistSqlResourceManager(() => SqlContext.GetConnection()); SqlContext.Update(sqlTry); sqlTrans.Complete(); trans.Rollback(); } var nosqlResults = NoSqlContext.Simple.FindAll().ToList(); nosqlResults.Count.Should().Be(1); nosqlResults.First().Should().Be(nosqlExpected); var sqlResults = SqlContext.Simple.ToList(); sqlResults.Count.Should().Be(1); sqlResults.First().Should().Be(sqlExpected); }
public void Should_Be_Able_To_Rollback_Native_Sql_Transaction() { var expected = SqlInitialModel; using (var trans = TransactionFactory.NewTransaction()) { trans.EnlistSqlResourceManager(() => SqlContext.GetConnection()); var toTry = new SimpleModel { Id = expected.Id, Name = expected.Name, Number = expected.Number + 1 }; toTry.Should().NotBe(expected); var nativeTrans = SqlContext.BeginTransaction(); SqlContext.Update(toTry); trans.Rollback(); nativeTrans.Invoking(x => x.Commit()).ShouldThrow<SQLiteException>(); } var results = SqlContext.Simple.ToList(); results.Count.Should().Be(1); results.First().Should().Be(expected); }