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;
+
+ }
+
///
/// 添加返回实体