大概现在有八万条数据,之前有十万条,之前在docker 中装的MySQL,容器丢失了,数据也是来自互联网(我用的是一个scarpy框架爬取的,大概有两个站点的数据),最近写Flask没整理,

(后面使用go的框架 重写了一版 )
前台使用的vue --> vue(大部分别人帮我写的,比如组件封装之类的,接口什么的是我自己调的)
这里Controller 用的是 using MediatR 个包
中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互
可以看到Controller 是非常明了的只需要定义请求和返回 (abpNET5)

具体的功能实现 自己定义一个 Handler文件夹
这里的PagedAsync() 这个是自己扩展的一个静态的方法 意思就是 分页并异步(因为框架比较模块设计 每个模块都可以根据需求自己扩展)
CancellationToken 这里 对长时间阻塞调用的异步取消令牌应用,在某些场景中,我们需要请求外部的第三方资源,但是由于网络等原因,可能会造成长时间的等待以致业务超时退出,这种情况可以使用 CancellationToken 来进行优化,但请求超过指定时长后退出,而不必针对每个 HttpClient 进行单独的超时设置
线上的total 我给屏蔽了,实际是有九万多条


public class HomeHandler : IRequestHandler<GetPostRequest, PagedResultDto<GetPostItem>>
{
private readonly IRepository<Posts, int> _postsRepository;
private readonly IRepository<Discussions, int> _disRepository;
private readonly IMapper _mapper;
public HomeHandler(IRepository<Posts, int> postsRepository, IRepository<Discussions, int> disRepository, IMapper mapper)
{
_postsRepository = postsRepository;
_disRepository = disRepository;
_mapper = mapper;
}
public async Task<PagedResultDto<GetPostItem>> Handle(GetPostRequest request, CancellationToken cancellationToken)
{
// 查询条件
var postquery = _postsRepository.GetQuery();
var disquery = _disRepository.GetQuery();
var queries = from post in postquery
join dis in disquery
on (int)post.DiscussionId equals dis.Id
select new GetPostItem
{
Id = post.Id,
Type = post.Type,
Content = post.Content,
Title = dis.Title,
CreateOn = post.CreateOn,
UpdateOn = post.UpdateOn
};
var query = queries.WhereIf(!string.IsNullOrEmpty(request.Keyworks), a => a.Title.Contains(request.Keyworks) || a.Content.Contains(request.Keyworks));
//查询数据库
var items = await query.PagedAsync(request);
var total = await query.CountAsync();
var pageTotal = items.Count();
return new PagedResultDto<GetPostItem>(items, total, pageTotal);
}
}
/// <summary>
/// 请求类型
/// </summary>
public class GetPostRequest : PagedRequest, IRequest<PagedResultDto<GetPostItem>>
{
public string Keyworks { get; set; }
}
/// <summary>
/// 返回类型
/// </summary>
public class GetPostItem : EntityDto<int>
{
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 类型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 内容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 状态:-1-删除 0-禁用 1-正常
/// </summary>
public EntityStatusEnums Status { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateOn { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdateOn { get; set; }
}
swagger 图

EFCore --> sql控制台日志
public static readonly ILoggerFactory MyLogFactory = LoggerFactory.Create(build =>
{
build.AddConsole(); // 用于控制台程序的输出
// build.AddDebug(); // 用于VS调试,输出窗口的输出
});
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLoggerFactory(MyLogFactory);
}