public void DistributedTransaction() { //失败事务 IDbAccessor _db1 = DbFactory.GetDbAccessor(Config.SQLITE1, DatabaseType.SQLite); IDbAccessor _db2 = DbFactory.GetDbAccessor(Config.SQLITE2, DatabaseType.SQLite); _db1.DeleteAll <Base_UnitTest>(); _db2.DeleteAll <Base_UnitTest>(); Base_UnitTest data1 = new Base_UnitTest { Id = Guid.NewGuid().ToString(), UserId = "1", UserName = Guid.NewGuid().ToString() }; Base_UnitTest data2 = new Base_UnitTest { Id = data1.Id, UserId = "1", UserName = Guid.NewGuid().ToString() }; Base_UnitTest data3 = new Base_UnitTest { Id = Guid.NewGuid().ToString(), UserId = "2", UserName = Guid.NewGuid().ToString() }; new Action(() => { var transaction = DistributedTransactionFactory.GetDistributedTransaction(); transaction.AddDbAccessor(_db1, _db2); var succcess = transaction.RunTransaction(() => { _db1.ExecuteSql("insert into Base_UnitTest(Id,CreateTime) values('10',@CreateTime) ", ("@CreateTime", DateTime.Now)); _db1.Insert(data1); _db1.Insert(data2); _db2.Insert(data1); _db2.Insert(data3); }); Assert.IsFalse(succcess.Success); Assert.AreEqual(0, _db1.GetIQueryable <Base_UnitTest>().Count()); Assert.AreEqual(0, _db2.GetIQueryable <Base_UnitTest>().Count()); })(); //成功事务 new Action(() => { var transaction = DistributedTransactionFactory.GetDistributedTransaction(); transaction.AddDbAccessor(_db1, _db2); var succcess = transaction .RunTransaction(() => { _db1.ExecuteSql("insert into Base_UnitTest(Id,CreateTime) values('10',@CreateTime) ", ("@CreateTime", DateTime.Now)); _db1.Insert(data1); _db1.Insert(data3); _db2.Insert(data1); _db2.Insert(data3); }); int count1 = _db1.GetIQueryable <Base_UnitTest>().Count(); int count2 = _db2.GetIQueryable <Base_UnitTest>().Count(); Assert.IsTrue(succcess.Success); Assert.AreEqual(3, count1); Assert.AreEqual(2, count2); })(); }