using System; using System.Threading.Tasks; using Util.Data.Sql; using Util.Tests.Configs; namespace Util.Data.Dapper.Tests.SqlExecutor { /// /// Oracle Sql执行器测试 - 事务测试 /// public partial class OracleExecutorTest { /// /// 测试事务操作 - 不使用事务,第一次操作成功,第二次失败 /// [Fact] public async Task TestTransaction_1() { //创建两个Id var id = Guid.NewGuid(); var id2 = Guid.NewGuid(); try { //插入Id成功 await _sqlExecutor .Insert( "ProductId,Code", "Product" ) .Values( id, TestConfig.Value ) .ExecuteAsync(); //Code2列名错误,插入Id2失败 await _sqlExecutor .Insert( "ProductId,Code,Code2", "Product" ) .Values( id2, TestConfig.Value, TestConfig.Value ) .ExecuteAsync(); } catch { // ignored } //断言 var exists = await _sqlExecutor.From( "Product" ).Where( "ProductId", id ).ExecuteExistsAsync(); var exists2 = await _sqlExecutor.From( "Product" ).Where( "ProductId", id2 ).ExecuteExistsAsync(); Assert.True( exists ); Assert.False( exists2 ); } /// /// 测试事务操作 - 调用BeginTransaction,CommitTransaction,RollbackTransaction /// [Fact] public async Task TestTransaction_2() { //开始事务 _sqlExecutor.BeginTransaction(); //创建两个Id var id = Guid.NewGuid(); var id2 = Guid.NewGuid(); try { //插入Id成功 await _sqlExecutor .Insert( "ProductId,Code", "Product" ) .Values( id, TestConfig.Value ) .ExecuteAsync(); //Code2列名错误,插入Id2失败 await _sqlExecutor .Insert( "ProductId,Code,Code2", "Product" ) .Values( id2, TestConfig.Value, TestConfig.Value ) .ExecuteAsync(); //提交事务 _sqlExecutor.CommitTransaction(); } catch { //回滚事务 _sqlExecutor.RollbackTransaction(); } //断言 var exists = await _sqlExecutor.From( "Product" ).Where( "ProductId", id ).ExecuteExistsAsync(); var exists2 = await _sqlExecutor.From( "Product" ).Where( "ProductId", id2 ).ExecuteExistsAsync(); Assert.False( exists ); Assert.False( exists2 ); } /// /// 测试事务操作 - 使用using调用BeginTransaction /// [Fact] public async Task TestTransaction_3() { //创建两个Id var id = Guid.NewGuid(); var id2 = Guid.NewGuid(); try { using var transaction = _sqlExecutor.BeginTransaction(); //插入Id成功 await _sqlExecutor .Insert( "ProductId,Code", "Product" ) .Values( id, TestConfig.Value ) .ExecuteAsync(); //Code2列名错误,插入Id2失败 await _sqlExecutor .Insert( "ProductId,Code,Code2", "Product" ) .Values( id2, TestConfig.Value, TestConfig.Value ) .ExecuteAsync(); //提交事务 transaction.Commit(); } catch { // ignored } //断言 var exists = await _sqlExecutor.From( "Product" ).Where( "ProductId", id ).ExecuteExistsAsync(); var exists2 = await _sqlExecutor.From( "Product" ).Where( "ProductId", id2 ).ExecuteExistsAsync(); Assert.False( exists ); Assert.False( exists2 ); } /// /// 测试事务操作 - 外部传入事务 - 回滚 /// [Fact] public async Task TestTransaction_4() { //Sql执行器实例2开始事务 _sqlExecutor2.BeginTransaction(); var transaction = _sqlExecutor2.GetTransaction(); //设置Sql执行器实例1事务 _sqlExecutor.SetTransaction( transaction ); //创建两个Id var id = Guid.NewGuid(); var id2 = Guid.NewGuid(); try { //插入Id成功 await _sqlExecutor .Insert( "ProductId,Code", "Product" ) .Values( id, TestConfig.Value ) .ExecuteAsync(); //Code2列名错误,插入Id2失败 await _sqlExecutor2 .Insert( "ProductId,Code,Code2", "Product" ) .Values( id2, TestConfig.Value, TestConfig.Value ) .ExecuteAsync(); //提交事务 _sqlExecutor.CommitTransaction(); } catch { //回滚事务 _sqlExecutor.RollbackTransaction(); } //断言 var exists = await _sqlExecutor.From( "Product" ).Where( "ProductId", id ).ExecuteExistsAsync(); var exists2 = await _sqlExecutor.From( "Product" ).Where( "ProductId", id2 ).ExecuteExistsAsync(); Assert.False( exists ); Assert.False( exists2 ); } /// /// 测试事务操作 - 外部传入事务 - 成功 /// [Fact] public async Task TestTransaction_5() { //Sql执行器实例2开始事务 _sqlExecutor2.BeginTransaction(); var transaction = _sqlExecutor2.GetTransaction(); //设置Sql执行器实例1事务 _sqlExecutor.SetTransaction( transaction ); //创建两个Id var id = Guid.NewGuid(); var id2 = Guid.NewGuid(); try { //插入Id成功 await _sqlExecutor .Insert( "ProductId,Code", "Product" ) .Values( id, TestConfig.Value ) .ExecuteAsync(); //Code2列名错误,插入Id2失败 await _sqlExecutor2 .Insert( "ProductId,Code", "Product" ) .Values( id2, TestConfig.Value ) .ExecuteAsync(); //提交事务 _sqlExecutor.CommitTransaction(); } catch { //回滚事务 _sqlExecutor.RollbackTransaction(); } //断言 var exists = await _sqlExecutor.From( "Product" ).Where( "ProductId", id ).ExecuteExistsAsync(); var exists2 = await _sqlExecutor.From( "Product" ).Where( "ProductId", id2 ).ExecuteExistsAsync(); Assert.True( exists ); Assert.True( exists2 ); } /// /// 测试事务操作 - 成功提交 /// [Fact] public async Task TestTransaction_6() { //开始事务 _sqlExecutor.BeginTransaction(); //创建两个Id var id = Guid.NewGuid(); var id2 = Guid.NewGuid(); try { //插入Id成功 await _sqlExecutor .Insert( "ProductId,Code", "Product" ) .Values( id, TestConfig.Value ) .ExecuteAsync(); //插入Id2成功 await _sqlExecutor .Insert( "ProductId,Code", "Product" ) .Values( id2, TestConfig.Value ) .ExecuteAsync(); //提交事务 _sqlExecutor.CommitTransaction(); } catch { //回滚事务 _sqlExecutor.RollbackTransaction(); } //断言 var exists = await _sqlExecutor.From( "Product" ).Where( "ProductId", id ).ExecuteExistsAsync(); var exists2 = await _sqlExecutor.From( "Product" ).Where( "ProductId", id2 ).ExecuteExistsAsync(); Assert.True( exists ); Assert.True( exists2 ); } } }