using System; using System.Linq; using NUnit.Framework; using Microsoft.Extensions.DependencyInjection; using OpenAuth.Repository.Domain; using OpenAuth.Repository.Interface; namespace OpenAuth.Repository.Test { /// /// 测试事务 /// class TestTransaction : TestBase { /// /// 测试事务正常提交 /// [Test] public void NormalSubmit() { var unitWork = _autofacServiceProvider.GetService>(); unitWork.ExecuteWithTransaction(() => { var account = "user_" + DateTime.Now.ToString("yyyy_MM_dd HH:mm:ss"); AddAndUpdate(account, unitWork); }); } /// /// 测试事务回滚 /// [Test] public void SubmitWithRollback() { var unitWork = _autofacServiceProvider.GetService>(); var account = "user_" + DateTime.Now.ToString("yyyy_MM_dd HH:mm:ss"); try { unitWork.ExecuteWithTransaction(() => { AddAndUpdate(account, unitWork); throw new Exception("模拟异常"); }); } catch (Exception e) { Console.WriteLine(e); } //如果没有插入成功,表示事务发生了回滚 Assert.IsFalse(unitWork.Any( u=>u.Id == account)); } /// /// 测试添加,单个修改,Z.EntityFramework.Plus条件修改 /// private void AddAndUpdate(string account, IUnitWork unitWork) { var user = new User { Id = account, Account = account, Name = account, }; unitWork.Add(user); unitWork.Save(); user.Account = "Trans_" + user.Account; user.Name = "Trans_" + user.Name; unitWork.Update(user); unitWork.Save(); unitWork.Update(u => u.Id == account, u => new User { Account = "Trans2_" + user.Account }); } [Test] public void MultiUpdate() { var unitWork = _autofacServiceProvider.GetService>(); var users = unitWork.Find(u => u.Account.Contains("test")); foreach (var user in users) { user.Name = "user_" + DateTime.Now.ToString("yyyy_MM_dd HH:mm:ss"); unitWork.Update(user); } unitWork.Save(); } [Test] public void MultiUpdate2() { var unitWork = _autofacServiceProvider.GetService>(); var users = unitWork.Find(null).ToList(); unitWork.ExecuteWithTransaction(()=> { foreach (var req in users) { unitWork.Update(u =>u.Id == req.Id, user => new User { Name = "user_" + DateTime.Now.ToString("yyyy_MM_dd HH:mm:ss") }); unitWork.Update(u => u.Id == "08f41bf6-4388-4b1e-bd3e-2ff538b44b1b", u => new Org { CreateTime = DateTime.Now }); } unitWork.Save(); }); } } }