From d51d31899fbb781378a9f98cea1e60e361b05df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Wed, 13 Apr 2022 21:36:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=8B=E5=8A=A1=E3=80=81?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++ .../Config/SwaggerDoc.xml | 6 ++ .../Controllers/TestController.cs | 55 +++++++++++++++++- .../yi-sqlsugar-dev.db | Bin 12288 -> 12288 bytes .../Yi.Framework.Repository/IRepository.cs | 1 + .../Yi.Framework.Repository/Repository.cs | 12 ++++ 6 files changed, 77 insertions(+), 2 deletions(-) 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 8f490588091104e1d5046fafb117c8d5b69a3089..b16cd971c015be366d0c05ff85a05f977d37791d 100644 GIT binary patch delta 107 zcmZojXh@hK&8Rq0##vC2LC^XlFaHk)CO#(yJ}3V3n*{|f@oskFJHg1u8G{Tr7P@gV ru|C~c_>gt7qx?xe{+Y;dv!Fr?KV$U7!f+mLW;RZdf2M~^n* : 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; + + } + /// /// 添加返回实体