using System;
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
});
}
}
}