From 938e18c727eae2c9966ab2cb059d61e9faa799d4 Mon Sep 17 00:00:00 2001 From: 644553 <644553@qq.com> Date: Fri, 8 Sep 2023 17:20:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=BC=95=E7=94=A8=20=E8=A7=A3=E5=86=B3WEBAPI=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- samples/web/Liuliu.Demo.WebApi/Liuliu.Demo.WebApi.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/samples/web/Liuliu.Demo.WebApi/Liuliu.Demo.WebApi.csproj b/samples/web/Liuliu.Demo.WebApi/Liuliu.Demo.WebApi.csproj index 503d8631..126ecc6c 100644 --- a/samples/web/Liuliu.Demo.WebApi/Liuliu.Demo.WebApi.csproj +++ b/samples/web/Liuliu.Demo.WebApi/Liuliu.Demo.WebApi.csproj @@ -42,6 +42,8 @@ + + From 579098b78ff1512960336b055bc46e8ebd3bc057 Mon Sep 17 00:00:00 2001 From: 644553 <644553@qq.com> Date: Sat, 9 Sep 2023 08:49:34 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=89=A9=E5=B1=95AjaxResult?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/OSharp.AspNetCore/UI/AjaxResult.cs | 133 ++++++++++++++++++ .../UI/AjaxResultExtensions.cs | 29 ++++ 2 files changed, 162 insertions(+) diff --git a/src/OSharp.AspNetCore/UI/AjaxResult.cs b/src/OSharp.AspNetCore/UI/AjaxResult.cs index 89119851..eb24ed91 100644 --- a/src/OSharp.AspNetCore/UI/AjaxResult.cs +++ b/src/OSharp.AspNetCore/UI/AjaxResult.cs @@ -45,6 +45,36 @@ public AjaxResult(object data, AjaxResultType type = AjaxResultType.Success, str : this(content ?? type.ToDescription(), data, type) { } + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(AjaxResultType type, string content, object data) + { + Type = type; + Content = content; + Data = data; + } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(AjaxResultType type, string content) + { + Type = type; + Content = content; + Data = null; + } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(string content) + { + Type = AjaxResultType.Success; + Content = content; + Data = null; + } + /// /// 获取或设置 Ajax操作结果类型 /// @@ -84,3 +114,106 @@ public static AjaxResult Success(object data = null) return new AjaxResult("操作执行成功", AjaxResultType.Success, data); } } + +public class AjaxResult where T : class +{ + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult() + : this(null) + { } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(string content, AjaxResultType type = AjaxResultType.Success, T data = null) + : this(content, data, type) + { } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(string content, T data, AjaxResultType type = AjaxResultType.Success) + { + Type = type; + Content = content; + Data = data; + } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(T data, AjaxResultType type = AjaxResultType.Success, string content = null) + : this(content ?? type.ToDescription(), data, type) + { } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(AjaxResultType type, string content, T data) + { + Type = type; + Content = content; + Data = data; + } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(AjaxResultType type, string content) + { + Type = type; + Content = content; + Data = null; + } + + /// + /// 初始化一个类型的新实例 + /// + public AjaxResult(string content) + { + Type = AjaxResultType.Success; + Content = content; + Data = null; + } + + /// + /// 获取或设置 Ajax操作结果类型 + /// + public AjaxResultType Type { get; set; } + + /// + /// 获取或设置 消息内容 + /// + public string Content { get; set; } + + /// + /// 获取或设置 返回数据 + /// + public T Data { get; set; } + + /// + /// 是否成功 + /// + public bool Succeeded() + { + return Type == AjaxResultType.Success; + } + + /// + /// 是否错误 + /// + public bool Error() + { + return Type == AjaxResultType.Error; + } + + /// + /// 成功的AjaxResult + /// + public static AjaxResult Success(T data = null) + { + return new AjaxResult("操作执行成功", AjaxResultType.Success, data); + } +} diff --git a/src/OSharp.AspNetCore/UI/AjaxResultExtensions.cs b/src/OSharp.AspNetCore/UI/AjaxResultExtensions.cs index 12c8f244..5ab528e0 100644 --- a/src/OSharp.AspNetCore/UI/AjaxResultExtensions.cs +++ b/src/OSharp.AspNetCore/UI/AjaxResultExtensions.cs @@ -56,6 +56,35 @@ public static AjaxResult ToAjaxResult(this OperationResult result, Func + /// 将业务操作结果转ajax操作结果,并处理强类型的 OperationResult.Data + /// + public static AjaxResult ToAjaxResultEx(this OperationResult result, Func dataFunc = null) where T : class + { + string content = result.Message ?? result.ResultType.ToDescription(); + AjaxResultType type = result.ResultType.ToAjaxResultType(); + T data = dataFunc == null ? result.Data : dataFunc(result.Data); + return new AjaxResult(content, type, data); + } + + /// + /// 将业务操作结果转ajax操作结果,会将 object 类型的 OperationResult.Data 转换为强类型 T,再通过 dataFunc 进行进一步处理 + /// + public static AjaxResult ToAjaxResultEx(this OperationResult result, Func dataFunc) where T : class + { + string content = result.Message ?? result.ResultType.ToDescription(); + AjaxResultType type = result.ResultType.ToAjaxResultType(); + T data = null; + if (result.Data != null) + { + if (dataFunc != null && result.Data is T resultData) + { + data = dataFunc(resultData); + } + } + return new AjaxResult(content, type, data); + } + /// /// 把业务结果类型转换为Ajax结果类型 /// From f3ea0018a80115149b61b92f118065addc38f5a2 Mon Sep 17 00:00:00 2001 From: 644553 <644553@qq.com> Date: Sat, 9 Sep 2023 10:14:59 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89OjbectResult=E7=9A=84UnitOfWork=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mvc/Filters/UnitOfWorkImpl.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/OSharp.AspNetCore/Mvc/Filters/UnitOfWorkImpl.cs b/src/OSharp.AspNetCore/Mvc/Filters/UnitOfWorkImpl.cs index 92815ed6..dcf8f53d 100644 --- a/src/OSharp.AspNetCore/Mvc/Filters/UnitOfWorkImpl.cs +++ b/src/OSharp.AspNetCore/Mvc/Filters/UnitOfWorkImpl.cs @@ -7,6 +7,8 @@ // 2019-05-14 17:37 // ----------------------------------------------------------------------- +using Newtonsoft.Json; + namespace OSharp.AspNetCore.Mvc.Filters; /// @@ -55,6 +57,7 @@ public void OnActionExecuted(ActionExecutedContext context) context.ExceptionHandled = true; } } + var x = context.Result; if (context.Result is JsonResult result1) { if (result1.Value is AjaxResult ajax) @@ -80,7 +83,20 @@ public void OnActionExecuted(ActionExecutedContext context) } else { - _unitOfWork?.Commit(); + try + { + var ajax2 = JsonConvert.DeserializeObject(result2.Value.ToJsonString()); + type = ajax2.Type; + message = ajax2.Content; + if (ajax2.Succeeded()) + { + _unitOfWork?.Commit(); + } + } + catch + { + _unitOfWork?.Commit(); + } } } //普通请求 From a7182a40f84d132f02e46ea6aaaee546abe02b5e Mon Sep 17 00:00:00 2001 From: 644553 <644553@qq.com> Date: Sat, 9 Sep 2023 10:27:17 +0800 Subject: [PATCH 4/4] =?UTF-8?q?DbContextOptions=20=E5=BF=BD=E7=95=A5AsNoTr?= =?UTF-8?q?acking=20=E6=8A=A5=E9=94=99=20=20DEBUG=E6=97=B6=E5=BC=80?= =?UTF-8?q?=E5=90=AFEF=E6=89=93=E5=8D=B0SQL=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OSharp.EntityFrameworkCore.csproj | 1 + src/OSharp.EntityFrameworkCore/ServiceExtensions.cs | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/OSharp.EntityFrameworkCore/OSharp.EntityFrameworkCore.csproj b/src/OSharp.EntityFrameworkCore/OSharp.EntityFrameworkCore.csproj index 959015d2..1d05e291 100644 --- a/src/OSharp.EntityFrameworkCore/OSharp.EntityFrameworkCore.csproj +++ b/src/OSharp.EntityFrameworkCore/OSharp.EntityFrameworkCore.csproj @@ -13,6 +13,7 @@ + diff --git a/src/OSharp.EntityFrameworkCore/ServiceExtensions.cs b/src/OSharp.EntityFrameworkCore/ServiceExtensions.cs index 74594451..93af04ec 100644 --- a/src/OSharp.EntityFrameworkCore/ServiceExtensions.cs +++ b/src/OSharp.EntityFrameworkCore/ServiceExtensions.cs @@ -8,6 +8,8 @@ // ----------------------------------------------------------------------- +using Microsoft.EntityFrameworkCore.Diagnostics; + namespace OSharp.Entity; /// @@ -49,6 +51,15 @@ public static DbContextOptionsBuilder BuildDbContextOptionsBuilder(t throw new OsharpException($"无法找到数据上下文 {dbContextType.DisplayName()} 的配置信息"); } + builder.ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.DetachedLazyLoadingWarning)); ////忽略AsNoTracking 报错 + +#if DEBUG + builder.UseLoggerFactory((LoggerFactory.Create(options => + { + options.AddConsole();//开启ef打印sql语句 + }))); +#endif + ILogger logger = provider.GetLogger(typeof(ServiceExtensions)); //启用延迟加载 if (osharpDbContextOptions.LazyLoadingProxiesEnabled)