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 @@ + + 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(); + } } } //普通请求 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结果类型 /// 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)