diff --git a/README.md b/README.md
index 19e516b6..31891655 100644
--- a/README.md
+++ b/README.md
@@ -154,6 +154,11 @@ WebFirst开发:所有代码生成器已经配置完成,无需任何操作数
没了,恭喜你已经成功完成了项目,并且已经具备大部分通用场景业务
是不是一个字?爽!
到此为止,你无需写任何一个代码!
+
+**爽点**:
+
+新人,看这里,项目下载之后直接可以启动,无任何依赖,之后你可以查看`Test控制器`,迫不及待的快来爽一爽!
+
我们将使用说明转移至我们的官方论坛中,正在制作中,尽情期待!
****
diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml
index ba2472e8..a8755344 100644
--- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml
+++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Config/SwaggerDoc.xml
@@ -75,5 +75,11 @@
+
+
+ 异步事务测试
+
+
+
diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs
index a1fb5093..0cd9394d 100644
--- a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs
+++ b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/Controllers/TestController.cs
@@ -23,7 +23,8 @@ namespace Yi.Framework.ApiMicroservice.Controllers
{
private IStringLocalizer _local;
private IUserService _iUserService;
- public TestController(ILogger logger, IUserService iUserService, IStringLocalizer local)
+ //你可以依赖注入服务层各各接口,也可以注入其他仓储层,怎么爽怎么来!
+ public TestController(ILogger logger, IUserService iUserService, IStringLocalizer local)
{
_local = local;
_iUserService = iUserService;
@@ -34,9 +35,28 @@ namespace Yi.Framework.ApiMicroservice.Controllers
///
///
[HttpGet]
- /// 特点:仓储代理上下文对象,用起来就是爽
+ // 特点:化繁为简!意框架仓储代理上下文对象,用起来就是爽,但最好按规范来爽!
+ // 规范:控制器建议不要使用切换仓储方法,控制器严禁使用DB上下文对象,其它怎么爽怎么来!
public async Task DbTest()
{
+ //非常好,使用UserService的特有方法
+ await _iUserService.DbTest();
+
+ //非常好,依赖注入使用其他Service的特有方法(就tm一张表,自己注入自己)
+ await _iUserService.DbTest();
+
+ //很核理,使用仓储的通用方法
+ await _iUserService._repository.GetListAsync();
+
+ //挺不错,依赖注入其他仓储(就tm一张表,自己注入自己)
+ await _iUserService._repository.GetListAsync();
+
+ //不建议,但爽了再说,直接切换其他仓储(就tm一张表,自己切换自己)
+ await _iUserService._repository.ChangeRepository>().GetListAsync();
+
+ //恭喜你已经毕业了!此后将有一天,接手到这个的软件的程序员将破口大骂。
+ await _iUserService._repository._Db.Queryable().ToListAsync();
+
return Result.Success().SetData(await _iUserService.DbTest());
}
@@ -45,6 +65,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers
///
///
[HttpGet]
+ //根据浏览器语言设置来切换输出
public Result LocalTest()
{
return Result.Success().SetData(_local["succeed"]);
@@ -71,5 +92,35 @@ namespace Yi.Framework.ApiMicroservice.Controllers
{
return Result.Success();
}
+
+ ///
+ /// 异步事务测试
+ ///
+ ///
+ [HttpGet]
+ //注册一个用户获取它的信息之后再更新它,但是这个年龄可能会报错
+ //如果一个事务中有任何一个错误,将会把所有执行过的操作进行回滚,确保数据的原子性
+ public async Task TranTest()
+ {
+ UserEntity user = new() { UserName = $"杰哥{DateTime.Now}", Password = "5201314", Age = 99 };
+
+ var res = await _iUserService._repository.UseTranAsync(async () =>
+ {
+ await _iUserService.Register(user, (o) => user = o);
+ user.Age = 18 / (new Random().Next(0, 2));
+ await _iUserService._repository.UpdateAsync(user);
+ });
+ if (res)
+ {
+ return Result.Success("执行成功!");
+ }
+ else
+ {
+ return Result.Error("发生错误,插入已回滚!");
+ }
+
+ }
+
+ //emmmm,看来一张表已经满足不了,接下来将要大更新一波
}
}
diff --git a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db
index 8f490588..b16cd971 100644
Binary files a/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db and b/Yi.Framework.Net6/Yi.Framework.ApiMicroservice/yi-sqlsugar-dev.db differ
diff --git a/Yi.Framework.Net6/Yi.Framework.Repository/IRepository.cs b/Yi.Framework.Net6/Yi.Framework.Repository/IRepository.cs
index 1bca4848..03494b5c 100644
--- a/Yi.Framework.Net6/Yi.Framework.Repository/IRepository.cs
+++ b/Yi.Framework.Net6/Yi.Framework.Repository/IRepository.cs
@@ -14,6 +14,7 @@ namespace Yi.Framework.Repository
public interface IRepository : ISimpleClient where T : BaseModelEntity,new()
{
public ISqlSugarClient _Db { get; set; }
+ public Task UseTranAsync(Func func);
public Task InsertReturnEntityAsync(T entity);
public Task> StoreAsync(string storeName, object para);
public Task>> CommonPageAsync(QueryPageCondition pars);
diff --git a/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs b/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs
index 46efea88..58775d25 100644
--- a/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs
+++ b/Yi.Framework.Net6/Yi.Framework.Repository/Repository.cs
@@ -24,6 +24,18 @@ namespace Yi.Framework.Repository
_Db = context;
}
+ ///
+ /// 异步事务
+ ///
+ ///
+ ///
+ public async Task UseTranAsync(Func func)
+ {
+ var res = await Db.AsTenant().UseTranAsync(func);
+ return res.IsSuccess;
+
+ }
+
///
/// 添加返回实体