public TransactionContainer(IServiceProvider serviceProvider) { _distributedTransaction = DistributedTransactionFactory.GetDistributedTransaction(); var repositories = GlobalData.AllFxTypes.Where(x => typeof(IRepository).IsAssignableFrom(x) && x.IsInterface ).Select(x => serviceProvider.GetService(x) as IRepository) .ToArray(); _distributedTransaction.AddRepository(repositories); }
public TransactionContainer(IServiceProvider serviceProvider) { _distributedTransaction = DistributedTransactionFactory.GetDistributedTransaction(); var allRepositoryInterfaces = GlobalData.AllFxTypes.Where(x => typeof(IDbAccessor).IsAssignableFrom(x) && x.IsInterface && x != typeof(IDbAccessor) ).ToList(); allRepositoryInterfaces.Add(typeof(IDbAccessor)); var repositories = allRepositoryInterfaces .Select(x => serviceProvider.GetService(x) as IDbAccessor) .ToArray(); _distributedTransaction.AddDbAccessor(repositories); }
public void DistributedTransaction() { //失败事务 var db1 = ServiceProvider.GetService <ISQLiteDb1>(); var db2 = ServiceProvider.GetService <ISQLiteDb2>(); 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); })(); }
public void DistributedTransactionTest() { //失败事务 IRepository _bus1 = DbFactory.GetRepository(); IRepository _bus2 = DbFactory.GetRepository("BaseDb_Test"); _bus1.DeleteAll <Base_UnitTest>(); _bus2.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 succcess = DistributedTransactionFactory.GetDistributedTransaction(_bus1, _bus2) .RunTransaction(() => { _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _bus1.Insert(data1); _bus1.Insert(data2); _bus2.Insert(data1); _bus2.Insert(data3); }); Assert.AreEqual(succcess.Success, false); Assert.AreEqual(_bus1.GetIQueryable <Base_UnitTest>().Count(), 0); Assert.AreEqual(_bus2.GetIQueryable <Base_UnitTest>().Count(), 0); })(); //成功事务 new Action(() => { var succcess = DistributedTransactionFactory.GetDistributedTransaction(_bus1, _bus2) .RunTransaction(() => { _bus1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _bus1.Insert(data1); _bus1.Insert(data3); _bus2.Insert(data1); _bus2.Insert(data3); }); int count1 = _bus1.GetIQueryable <Base_UnitTest>().Count(); int count2 = _bus2.GetIQueryable <Base_UnitTest>().Count(); Assert.AreEqual(succcess.Success, true); Assert.AreEqual(count1, 3); Assert.AreEqual(count2, 2); })(); }
public void DistributedTransaction() { //失败事务 IRepository _db1 = DbFactory.GetRepository("DataSource=db.db", DatabaseType.SQLite); IRepository _db2 = DbFactory.GetRepository("DataSource=db2.db", 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.AddRepository(_db1, _db2); var succcess = transaction.RunTransaction(() => { _db1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _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.AddRepository(_db1, _db2); var succcess = transaction .RunTransaction(() => { _db1.ExecuteSql("insert into Base_UnitTest(Id) values('10') "); _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); })(); }
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); })(); }