Bläddra i källkod

一点性能优化

懒得勤快 4 år sedan
förälder
incheckning
fc5a80a5df

+ 1 - 2
src/Masuit.MyBlogs.Core/Configs/AutofacModule.cs

@@ -1,9 +1,8 @@
 using Autofac;
 using Hangfire;
-using Masuit.MyBlogs.Core.Extensions;
+using Masuit.MyBlogs.Core.Extensions.Firewall;
 using Masuit.MyBlogs.Core.Extensions.Hangfire;
 using System.Reflection;
-using Masuit.MyBlogs.Core.Extensions.Firewall;
 
 namespace Masuit.MyBlogs.Core.Configs
 {

+ 1 - 0
src/Masuit.MyBlogs.Core/Controllers/ErrorController.cs

@@ -63,6 +63,7 @@ namespace Masuit.MyBlogs.Core.Controllers
                 req.Body.Seek(0, SeekOrigin.Begin);
                 using var sr = new StreamReader(req.Body, Encoding.UTF8, false);
                 var body = await sr.ReadToEndAsync();
+                body = HttpUtility.UrlDecode(body);
                 req.Body.Position = 0;
                 switch (feature.Error)
                 {

+ 11 - 10
src/Masuit.MyBlogs.Core/Controllers/HomeController.cs

@@ -1,4 +1,5 @@
-using Masuit.MyBlogs.Core.Common;
+using AutoMapper.QueryableExtensions;
+using Masuit.MyBlogs.Core.Common;
 using Masuit.MyBlogs.Core.Extensions;
 using Masuit.MyBlogs.Core.Infrastructure.Repository;
 using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
@@ -56,9 +57,9 @@ namespace Masuit.MyBlogs.Core.Controllers
         {
             var banners = AdsService.GetsByWeightedPrice(8, AdvertiseType.Banner).OrderBy(a => Guid.NewGuid()).ToList();
             var fastShares = await fastShareService.GetAllFromCacheAsync(s => s.Sort);
-            var postsQuery = PostService.GetQuery<PostDto>(p => p.Status == Status.Published); //准备文章的查询
-            var posts = await postsQuery.Where(p => !p.IsFixedTop).OrderBy(OrderBy.ModifyDate.GetDisplay() + " desc").ToCachedPagedListAsync(1, 15);
-            posts.Data.InsertRange(0, postsQuery.Where(p => p.IsFixedTop).OrderByDescending(p => p.ModifyDate).ToList());
+            var postsQuery = PostService.GetQuery(p => p.Status == Status.Published); //准备文章的查询
+            var posts = await postsQuery.Where(p => !p.IsFixedTop).OrderBy(OrderBy.ModifyDate.GetDisplay() + " desc").ToCachedPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
+            posts.Data.InsertRange(0, postsQuery.Where(p => p.IsFixedTop).OrderByDescending(p => p.ModifyDate).ProjectTo<PostDto>(MapperConfig).ToList());
             CheckPermission(posts);
             var viewModel = await GetIndexPageViewModel();
             viewModel.Banner = banners;
@@ -81,11 +82,11 @@ namespace Masuit.MyBlogs.Core.Controllers
         public async Task<ActionResult> Post([Optional] OrderBy? orderBy, [Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
         {
             var viewModel = await GetIndexPageViewModel();
-            var postsQuery = PostService.GetQuery<PostDto>(p => p.Status == Status.Published); //准备文章的查询
-            var posts = await postsQuery.Where(p => !p.IsFixedTop).OrderBy((orderBy ?? OrderBy.ModifyDate).GetDisplay() + " desc").ToCachedPagedListAsync(page, size);
+            var postsQuery = PostService.GetQuery(p => p.Status == Status.Published); //准备文章的查询
+            var posts = await postsQuery.Where(p => !p.IsFixedTop).OrderBy((orderBy ?? OrderBy.ModifyDate).GetDisplay() + " desc").ToCachedPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
             if (page == 1)
             {
-                posts.Data.InsertRange(0, postsQuery.Where(p => p.IsFixedTop).OrderByDescending(p => p.ModifyDate).ToList());
+                posts.Data.InsertRange(0, postsQuery.Where(p => p.IsFixedTop).OrderByDescending(p => p.ModifyDate).ProjectTo<PostDto>(MapperConfig).ToList());
             }
 
             CheckPermission(posts);
@@ -107,7 +108,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [Route("tag/{id}"), ResponseCache(Duration = 600, VaryByQueryKeys = new[] { "page", "size", "orderBy" }, VaryByHeader = "Cookie")]
         public async Task<ActionResult> Tag(string id, [Optional] OrderBy? orderBy, [Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
         {
-            var posts = await PostService.GetQuery<PostDto>(p => p.Label.Contains(id) && p.Status == Status.Published).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync(page, size);
+            var posts = await PostService.GetQuery(p => p.Label.Contains(id) && p.Status == Status.Published).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
             CheckPermission(posts);
             var viewModel = await GetIndexPageViewModel();
             ViewBag.Tag = id;
@@ -131,7 +132,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         {
             Expression<Func<Post, bool>> where = p => p.Author.Equals(author) || p.Modifier.Equals(author) || p.Email.Equals(author) || p.PostHistoryVersion.Any(v => v.Modifier.Equals(author) || v.ModifierEmail.Equals(author));
             where = where.And(p => p.Status == Status.Published);
-            var posts = PostService.GetQuery<PostDto>(where).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedList(page, size);
+            var posts = await PostService.GetQuery(where).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
             CheckPermission(posts);
             var viewModel = await GetIndexPageViewModel();
             ViewBag.Author = author;
@@ -155,7 +156,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         public async Task<ActionResult> Category(int id, [Optional] OrderBy? orderBy, [Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
         {
             var cat = await CategoryService.GetByIdAsync(id) ?? throw new NotFoundException("文章分类未找到");
-            var posts = PostService.GetQuery<PostDto>(p => p.CategoryId == cat.Id && p.Status == Status.Published).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedList(page, size);
+            var posts = await PostService.GetQuery(p => p.CategoryId == cat.Id && p.Status == Status.Published).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
             CheckPermission(posts);
             var viewModel = await GetIndexPageViewModel();
             viewModel.Posts = posts;

+ 1 - 1
src/Masuit.MyBlogs.Core/Controllers/LinksController.cs

@@ -131,7 +131,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         public async Task<ActionResult> Check(string link)
         {
             HttpClient.DefaultRequestHeaders.UserAgent.Add(ProductInfoHeaderValue.Parse("Mozilla/5.0"));
-            using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
+            using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
             return await HttpClient.GetAsync(link, cts.Token).ContinueWith(t =>
             {
                 if (t.IsFaulted || t.IsCanceled)

+ 1 - 1
src/Masuit.MyBlogs.Core/Controllers/SeminarController.cs

@@ -46,7 +46,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         public async Task<ActionResult> Index(int id, [Optional] OrderBy? orderBy, [Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")] int page = 1, [Range(1, 50, ErrorMessage = "页大小必须在0到50之间")] int size = 15)
         {
             var s = await SeminarService.GetByIdAsync(id) ?? throw new NotFoundException("文章未找到");
-            var posts = await PostService.GetQuery<PostDto>(p => p.Seminar.Any(x => x.Id == id) && p.Status == Status.Published).OrderBy($"{nameof(Post.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync(page, size);
+            var posts = await PostService.GetQuery(p => p.Seminar.Any(x => x.Id == id) && p.Status == Status.Published).OrderBy($"{nameof(Post.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToCachedPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
             ViewBag.Title = s.Title;
             ViewBag.Desc = s.Description;
             ViewBag.SubTitle = s.SubTitle;

+ 2 - 2
src/Masuit.MyBlogs.Core/Extensions/DriveHelpers/ProtectedApiCallHelper.cs

@@ -1,10 +1,10 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
 using System;
 using System.Linq;
 using System.Net.Http;
 using System.Net.Http.Headers;
 using System.Threading.Tasks;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
 
 namespace Masuit.MyBlogs.Core.Extensions.DriveHelpers
 {

+ 2 - 2
src/Masuit.MyBlogs.Core/Extensions/Firewall/AllowAccessFirewallAttribute.cs

@@ -1,5 +1,5 @@
-using System;
-using Microsoft.AspNetCore.Mvc.Filters;
+using Microsoft.AspNetCore.Mvc.Filters;
+using System;
 
 namespace Masuit.MyBlogs.Core.Extensions.Firewall
 {

+ 3 - 2
src/Masuit.MyBlogs.Core/Extensions/Hangfire/HangfireBackJob.cs

@@ -194,11 +194,12 @@ namespace Masuit.MyBlogs.Core.Extensions.Hangfire
             var client = _httpClientFactory.CreateClient();
             client.DefaultRequestHeaders.UserAgent.Add(ProductInfoHeaderValue.Parse("Mozilla/5.0"));
             client.DefaultRequestHeaders.Referrer = new Uri("https://google.com");
-            client.Timeout = TimeSpan.FromSeconds(5);
+            client.Timeout = TimeSpan.FromSeconds(10);
+            var cts = new CancellationTokenSource(client.Timeout);
             _linksService.GetQuery(l => !l.Except).AsParallel().ForAll(link =>
             {
                 var prev = link.Status;
-                client.GetStringAsync(link.Url, new CancellationTokenSource(client.Timeout).Token).ContinueWith(t =>
+                client.GetStringAsync(link.Url, cts.Token).ContinueWith(t =>
                 {
                     if (t.IsCanceled || t.IsFaulted)
                     {

+ 2 - 2
src/Masuit.MyBlogs.Core/Extensions/MyAuthorizeAttribute.cs

@@ -29,8 +29,8 @@ namespace Masuit.MyBlogs.Core.Extensions
                 return;
             }
 #if !DEBUG
-            UserInfoDto user = filterContext.HttpContext.Session.Get<UserInfoDto>(SessionKey.UserInfo);
-            if (user != null && user.IsAdmin)
+            var user = filterContext.HttpContext.Session.Get<UserInfoDto>(SessionKey.UserInfo);
+            if (user?.IsAdmin == true)
             {
                 return;
             }

+ 1 - 1
src/Masuit.MyBlogs.Core/Infrastructure/Drive/IDriveAccountService.cs

@@ -1,6 +1,6 @@
+using Masuit.MyBlogs.Core.Models.Drive;
 using System.Collections.Generic;
 using System.Threading.Tasks;
-using Masuit.MyBlogs.Core.Models.Drive;
 using static Masuit.MyBlogs.Core.Infrastructure.Drive.DriveAccountService;
 
 namespace Masuit.MyBlogs.Core.Infrastructure.Drive

+ 33 - 48
src/Masuit.MyBlogs.Core/Infrastructure/Repository/BaseRepository.cs

@@ -1,8 +1,8 @@
 using AutoMapper;
 using AutoMapper.QueryableExtensions;
 using EFCoreSecondLevelCacheInterceptor;
+using Masuit.LuceneEFCore.SearchEngine;
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
-using Masuit.Tools;
 using Masuit.Tools.Core.AspNetCore;
 using Masuit.Tools.Models;
 using Masuit.Tools.Systems;
@@ -20,7 +20,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
     /// DAL基类
     /// </summary>
     /// <typeparam name="T">实体类型</typeparam>
-    public abstract class BaseRepository<T> : Disposable, IBaseRepository<T> where T : class, new()
+    public abstract class BaseRepository<T> : Disposable, IBaseRepository<T> where T : LuceneIndexableBaseEntity
     {
         public virtual DataContext DataContext { get; set; }
 
@@ -497,7 +497,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>实体</returns>
         public virtual T GetNoTracking<TS>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
         {
-            return isAsc ? DataContext.Set<T>().OrderBy(orderby).AsNoTracking().FirstOrDefault(where) : DataContext.Set<T>().OrderByDescending(orderby).AsNoTracking().FirstOrDefault(where);
+            return isAsc ? EF.CompileQuery((DataContext ctx) => ctx.Set<T>().AsNoTracking().OrderBy(orderby).FirstOrDefault(where))(DataContext) : EF.CompileQuery((DataContext ctx) => ctx.Set<T>().AsNoTracking().OrderByDescending(orderby).FirstOrDefault(where))(DataContext);
         }
 
         /// <summary>
@@ -507,7 +507,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>实体</returns>
         public virtual TDto Get<TDto>(Expression<Func<T, bool>> where) where TDto : class
         {
-            return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FirstOrDefault();
+            return EF.CompileQuery((DataContext ctx) => ctx.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FirstOrDefault())(DataContext);
         }
 
         /// <summary>
@@ -551,7 +551,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>实体</returns>
         public virtual Task<T> GetNoTrackingAsync(Expression<Func<T, bool>> where)
         {
-            return DataContext.Set<T>().AsNoTracking().FirstOrDefaultAsync(@where);
+            return EF.CompileAsyncQuery((DataContext ctx) => ctx.Set<T>().AsNoTracking().FirstOrDefault(@where))(DataContext);
         }
 
         /// <summary>
@@ -562,9 +562,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>实体</returns>
-        public virtual async Task<T> GetNoTrackingAsync<TS>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
+        public virtual Task<T> GetNoTrackingAsync<TS>(Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
         {
-            return isAsc ? await DataContext.Set<T>().OrderBy(orderby).AsNoTracking().FirstOrDefaultAsync(where) : await DataContext.Set<T>().OrderByDescending(orderby).AsNoTracking().FirstOrDefaultAsync(where);
+            return isAsc ? EF.CompileAsyncQuery((DataContext ctx) => ctx.Set<T>().OrderBy(orderby).AsNoTracking().FirstOrDefault(where))(DataContext) : EF.CompileAsyncQuery((DataContext ctx) => ctx.Set<T>().OrderByDescending(orderby).AsNoTracking().FirstOrDefault(where))(DataContext);
         }
 
         /// <summary>
@@ -572,9 +572,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public virtual T GetById(object id)
+        public virtual T GetById(int id)
         {
-            return DataContext.Set<T>().Find(id);
+            return EF.CompileQuery((DataContext ctx, int xid) => ctx.Set<T>().FirstOrDefault(t => t.Id == xid))(DataContext, id);
         }
 
         /// <summary>
@@ -582,9 +582,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public virtual async Task<T> GetByIdAsync(object id)
+        public virtual Task<T> GetByIdAsync(int id)
         {
-            return await DataContext.Set<T>().FindAsync(id);
+            return EF.CompileAsyncQuery((DataContext ctx, int xid) => ctx.Set<T>().FirstOrDefault(t => t.Id == xid))(DataContext, id);
         }
 
         /// <summary>
@@ -599,8 +599,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual PagedList<T> GetPages<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc)
         {
-            var temp = DataContext.Set<T>().Where(where);
-            return isAsc ? temp.OrderBy(orderby).ToPagedList(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToPagedList(pageIndex, pageSize);
+            return isAsc ? DataContext.Set<T>().Where(where).OrderBy(orderby).ToPagedList(pageIndex, pageSize) : DataContext.Set<T>().Where(where).OrderByDescending(orderby).ToPagedList(pageIndex, pageSize);
         }
 
         /// <summary>
@@ -613,10 +612,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="orderby">orderby Lambda条件表达式</param>
         /// <param name="isAsc">升序降序</param>
         /// <returns>还未执行的SQL语句</returns>
-        public virtual Task<PagedList<T>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc)
+        public virtual Task<PagedList<T>> GetPagesAsync<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> orderby, bool isAsc)
         {
-            var temp = DataContext.Set<T>().Where(where);
-            return isAsc ? temp.OrderBy(orderby).ToPagedListAsync(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToPagedListAsync(pageIndex, pageSize);
+            return isAsc ? DataContext.Set<T>().Where(where).OrderBy(orderby).ToPagedListAsync(pageIndex, pageSize) : DataContext.Set<T>().Where(where).OrderByDescending(orderby).ToPagedListAsync(pageIndex, pageSize);
         }
 
         /// <summary>
@@ -680,8 +678,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual PagedList<T> GetPagesNoTracking<TS>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true)
         {
-            var temp = DataContext.Set<T>().Where(where).AsNoTracking();
-            return isAsc ? temp.OrderBy(orderby).ToPagedList(pageIndex, pageSize) : temp.OrderByDescending(orderby).ToPagedList(pageIndex, pageSize);
+            return isAsc ? DataContext.Set<T>().Where(where).AsNoTracking().OrderBy(orderby).ToPagedList(pageIndex, pageSize) : DataContext.Set<T>().Where(where).AsNoTracking().OrderByDescending(orderby).ToPagedList(pageIndex, pageSize);
         }
 
         /// <summary>
@@ -697,8 +694,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual PagedList<TDto> GetPages<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc = true) where TDto : class
         {
-            var temp = DataContext.Set<T>().Where(where).AsNoTracking();
-            return isAsc ? temp.OrderBy(orderby).ToPagedList<T, TDto>(pageIndex, pageSize, MapperConfig) : temp.OrderByDescending(orderby).ToPagedList<T, TDto>(pageIndex, pageSize, MapperConfig);
+            return isAsc ? DataContext.Set<T>().Where(where).AsNoTracking().OrderBy(orderby).ToPagedList<T, TDto>(pageIndex, pageSize, MapperConfig) : DataContext.Set<T>().Where(where).AsNoTracking().OrderByDescending(orderby).ToPagedList<T, TDto>(pageIndex, pageSize, MapperConfig);
         }
 
         /// <summary>
@@ -714,8 +710,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public Task<PagedList<TDto>> GetPagesAsync<TS, TDto>(int pageIndex, int pageSize, Expression<Func<T, bool>> where, Expression<Func<T, TS>> orderby, bool isAsc) where TDto : class
         {
-            var temp = DataContext.Set<T>().Where(where).AsNoTracking();
-            return isAsc ? temp.OrderBy(orderby).ToPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig) : temp.OrderByDescending(orderby).ToPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig);
+            return isAsc ? DataContext.Set<T>().Where(where).AsNoTracking().OrderBy(orderby).ToPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig) : DataContext.Set<T>().Where(where).AsNoTracking().OrderByDescending(orderby).ToPagedListAsync<T, TDto>(pageIndex, pageSize, MapperConfig);
         }
 
         /// <summary>
@@ -740,17 +735,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        public virtual bool DeleteById(object id)
+        public virtual bool DeleteById(int id)
         {
-            T t = GetById(id);
-            if (t != null)
-            {
-                DataContext.Entry(t).State = EntityState.Deleted;
-                DataContext.Remove(t);
-                return true;
-            }
-
-            return false;
+            return DataContext.Set<T>().Where(t => t.Id == id).Delete() > 0;
         }
 
         /// <summary>
@@ -781,9 +768,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <returns>删除成功</returns>
-        public virtual async Task<int> DeleteEntityAsync(Expression<Func<T, bool>> where)
+        public virtual Task<int> DeleteEntityAsync(Expression<Func<T, bool>> where)
         {
-            return await DataContext.Set<T>().Where(where).DeleteAsync();
+            return DataContext.Set<T>().Where(where).DeleteAsync();
         }
 
         /// <summary>
@@ -840,9 +827,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// 统一保存数据(异步)
         /// </summary>
         /// <returns>受影响的行数</returns>
-        public virtual async Task<int> SaveChangesAsync()
+        public virtual Task<int> SaveChangesAsync()
         {
-            return await DataContext.SaveChangesAsync();
+            return DataContext.SaveChangesAsync();
         }
 
         /// <summary>
@@ -852,7 +839,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>是否存在</returns>
         public virtual bool Any(Expression<Func<T, bool>> where)
         {
-            return DataContext.Set<T>().Any(where);
+            return EF.CompileQuery((DataContext ctx) => ctx.Set<T>().Any(where))(DataContext);
         }
 
         /// <summary>
@@ -862,7 +849,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>是否存在</returns>
         public virtual int Count(Expression<Func<T, bool>> where)
         {
-            return DataContext.Set<T>().Count(where);
+            return EF.CompileQuery((DataContext ctx) => ctx.Set<T>().Count(where))(DataContext);
         }
 
         /// <summary>
@@ -872,10 +859,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>删除成功</returns>
         public virtual bool DeleteEntities(IEnumerable<T> list)
         {
-            list.ForEach(t =>
-            {
-                DeleteEntity(t);
-            });
+            DataContext.RemoveRange(list);
             return true;
         }
 
@@ -886,7 +870,8 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>添加成功</returns>
         public virtual IEnumerable<T> AddEntities(IList<T> list)
         {
-            return list.Select(AddEntity);
+            DataContext.AddRange(list);
+            return list;
         }
 
         public override void Dispose(bool disposing)
@@ -895,7 +880,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
             DataContext = null;
         }
 
-        public T this[object id] => GetById(id);
+        public T this[int id] => GetById(id);
     }
 
     public static class QueryableExt
@@ -908,7 +893,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="page">当前页</param>
         /// <param name="size">页大小</param>
         /// <returns></returns>
-        public static PagedList<T> ToCachedPagedList<T>(this IOrderedQueryable<T> query, int page, int size) where T : class, new()
+        public static PagedList<T> ToCachedPagedList<T>(this IOrderedQueryable<T> query, int page, int size) where T : LuceneIndexableBaseEntity
         {
             var totalCount = query.Count();
             if (page * size > totalCount)
@@ -933,7 +918,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="page">当前页</param>
         /// <param name="size">页大小</param>
         /// <returns></returns>
-        public static async Task<PagedList<T>> ToCachedPagedListAsync<T>(this IOrderedQueryable<T> query, int page, int size) where T : class, new()
+        public static async Task<PagedList<T>> ToCachedPagedListAsync<T>(this IOrderedQueryable<T> query, int page, int size) where T : LuceneIndexableBaseEntity
         {
             var totalCount = query.Count();
             if (page * size > totalCount)
@@ -1014,7 +999,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="size">页大小</param>
         /// <param name="mapper"></param>
         /// <returns></returns>
-        public static PagedList<TDto> ToCachedPagedList<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class where T : class, new()
+        public static PagedList<TDto> ToCachedPagedList<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class where T : LuceneIndexableBaseEntity
         {
             var totalCount = query.Count();
             if (page * size > totalCount)
@@ -1041,7 +1026,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <param name="size">页大小</param>
         /// <param name="mapper"></param>
         /// <returns></returns>
-        public static async Task<PagedList<TDto>> ToCachedPagedListAsync<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class where T : class, new()
+        public static async Task<PagedList<TDto>> ToCachedPagedListAsync<T, TDto>(this IOrderedQueryable<T> query, int page, int size, MapperConfiguration mapper) where TDto : class where T : LuceneIndexableBaseEntity
         {
             var totalCount = query.Count();
             if (page * size > totalCount)

+ 4 - 6
src/Masuit.MyBlogs.Core/Infrastructure/Repository/CommentRepository.cs

@@ -27,10 +27,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public override Task<Comment> GetByIdAsync(object id)
+        public override Task<Comment> GetByIdAsync(int id)
         {
-            var cid = (int)id;
-            return DataContext.Comment.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefaultAsync(c => c.Id == cid);
+            return EF.CompileAsyncQuery((DataContext ctx, int cid) => ctx.Comment.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefault(c => c.Id == cid))(DataContext, id);
         }
 
         /// <summary>
@@ -38,10 +37,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public override Comment GetById(object id)
+        public override Comment GetById(int id)
         {
-            var cid = (int)id;
-            return DataContext.Comment.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefault(c => c.Id == cid);
+            return EF.CompileQuery((DataContext ctx, int cid) => ctx.Comment.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefault(c => c.Id == cid))(DataContext, id);
         }
 
         /// <summary>

+ 7 - 6
src/Masuit.MyBlogs.Core/Infrastructure/Repository/Interface/IBaseRepository.cs

@@ -1,4 +1,5 @@
-using Masuit.MyBlogs.Core.Models.Entity;
+using Masuit.LuceneEFCore.SearchEngine;
+using Masuit.MyBlogs.Core.Models.Entity;
 using Masuit.Tools.Models;
 using System;
 using System.Collections.Generic;
@@ -8,7 +9,7 @@ using System.Threading.Tasks;
 
 namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
 {
-    public interface IBaseRepository<T> : IDisposable where T : class, new()
+    public interface IBaseRepository<T> : IDisposable where T : LuceneIndexableBaseEntity
     {
         /// <summary>
         /// 获取所有实体
@@ -416,14 +417,14 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        T GetById(object id);
+        T GetById(int id);
 
         /// <summary>
         /// 根据ID找实体(异步)
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        Task<T> GetByIdAsync(object id);
+        Task<T> GetByIdAsync(int id);
 
         /// <summary>
         /// 高效分页查询方法
@@ -542,7 +543,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        bool DeleteById(object id);
+        bool DeleteById(int id);
 
         /// <summary>
         /// 删除实体
@@ -637,7 +638,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository.Interface
         IEnumerable<T> AddEntities(IList<T> list);
 
         void Dispose(bool disposing);
-        T this[object id] => GetById(id);
+        T this[int id] => GetById(id);
 
         List<T> this[Expression<Func<T, bool>> where] => GetQuery(where).ToList();
     }

+ 4 - 6
src/Masuit.MyBlogs.Core/Infrastructure/Repository/LeaveMessageRepository.cs

@@ -27,10 +27,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public override Task<LeaveMessage> GetByIdAsync(object id)
+        public override Task<LeaveMessage> GetByIdAsync(int id)
         {
-            var cid = (int)id;
-            return DataContext.LeaveMessage.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefaultAsync(c => c.Id == cid);
+            return EF.CompileAsyncQuery((DataContext ctx, int cid) => ctx.LeaveMessage.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefault(c => c.Id == cid))(DataContext, id);
         }
 
         /// <summary>
@@ -38,10 +37,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public override LeaveMessage GetById(object id)
+        public override LeaveMessage GetById(int id)
         {
-            var cid = (int)id;
-            return DataContext.LeaveMessage.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefault(c => c.Id == cid);
+            return EF.CompileQuery((DataContext ctx, int cid) => ctx.LeaveMessage.Include(c => c.Children).ThenInclude(c => c.Children).ThenInclude(c => c.Children).FirstOrDefault(c => c.Id == cid))(DataContext, id);
         }
 
         /// <summary>

+ 35 - 34
src/Masuit.MyBlogs.Core/Infrastructure/Services/BaseService.cs

@@ -1,4 +1,5 @@
-using Masuit.LuceneEFCore.SearchEngine.Interfaces;
+using Masuit.LuceneEFCore.SearchEngine;
+using Masuit.LuceneEFCore.SearchEngine.Interfaces;
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
 using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
 using Masuit.Tools.Models;
@@ -14,7 +15,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
     /// 业务层基类
     /// </summary>
     /// <typeparam name="T"></typeparam>
-    public class BaseService<T> : IBaseService<T> where T : class, new()
+    public class BaseService<T> : IBaseService<T> where T : LuceneIndexableBaseEntity
     {
         public virtual IBaseRepository<T> BaseDal { get; set; }
         protected readonly ISearchEngine<DataContext> SearchEngine;
@@ -508,9 +509,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>实体</returns>
-        public virtual async Task<T> GetAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
+        public virtual Task<T> GetAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
         {
-            return await BaseDal.GetAsync(where, orderby, isAsc);
+            return BaseDal.GetAsync(where, orderby, isAsc);
         }
 
         /// <summary>
@@ -518,9 +519,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <returns>实体</returns>
-        public virtual async Task<T> GetAsync(Expression<Func<T, bool>> @where)
+        public virtual Task<T> GetAsync(Expression<Func<T, bool>> @where)
         {
-            return await BaseDal.GetAsync(where);
+            return BaseDal.GetAsync(where);
         }
 
         /// <summary>
@@ -551,9 +552,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <returns>实体</returns>
-        public virtual async Task<T> GetNoTrackingAsync(Expression<Func<T, bool>> @where)
+        public virtual Task<T> GetNoTrackingAsync(Expression<Func<T, bool>> @where)
         {
-            return await BaseDal.GetNoTrackingAsync(where);
+            return BaseDal.GetNoTrackingAsync(where);
         }
 
         /// <summary>
@@ -564,9 +565,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="orderby">排序字段</param>
         /// <param name="isAsc">是否升序</param>
         /// <returns>实体</returns>
-        public virtual async Task<T> GetNoTrackingAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
+        public virtual Task<T> GetNoTrackingAsync<TS>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true)
         {
-            return await BaseDal.GetNoTrackingAsync(where, orderby, isAsc);
+            return BaseDal.GetNoTrackingAsync(where, orderby, isAsc);
         }
 
         /// <summary>
@@ -574,7 +575,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public virtual T GetById(object id)
+        public virtual T GetById(int id)
         {
             return BaseDal.GetById(id);
         }
@@ -584,9 +585,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        public virtual async Task<T> GetByIdAsync(object id)
+        public virtual Task<T> GetByIdAsync(int id)
         {
-            return await BaseDal.GetByIdAsync(id);
+            return BaseDal.GetByIdAsync(id);
         }
 
         /// <summary>
@@ -733,7 +734,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        public virtual bool DeleteById(object id)
+        public virtual bool DeleteById(int id)
         {
             return BaseDal.DeleteById(id);
         }
@@ -743,7 +744,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        public virtual bool DeleteByIdSaved(object id)
+        public virtual bool DeleteByIdSaved(int id)
         {
             BaseDal.DeleteById(id);
             return SaveChanges() > 0;
@@ -754,10 +755,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        public virtual async Task<int> DeleteByIdSavedAsync(object id)
+        public virtual Task<int> DeleteByIdSavedAsync(int id)
         {
             BaseDal.DeleteById(id);
-            return await SaveChangesAsync();
+            return SaveChangesAsync();
         }
 
         /// <summary>
@@ -796,10 +797,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <returns>删除成功</returns>
-        public virtual async Task<int> DeleteEntitySavedAsync(Expression<Func<T, bool>> @where)
+        public virtual Task<int> DeleteEntitySavedAsync(Expression<Func<T, bool>> @where)
         {
             BaseDal.DeleteEntity(where);
-            return await SaveChangesAsync();
+            return SaveChangesAsync();
         }
 
         /// <summary>
@@ -807,9 +808,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="where">查询条件</param>
         /// <returns>删除成功</returns>
-        public virtual async Task<int> DeleteEntityAsync(Expression<Func<T, bool>> @where)
+        public virtual Task<int> DeleteEntityAsync(Expression<Func<T, bool>> @where)
         {
-            return await BaseDal.DeleteEntityAsync(where);
+            return BaseDal.DeleteEntityAsync(where);
         }
 
         /// <summary>
@@ -828,10 +829,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="t">需要删除的实体</param>
         /// <returns>删除成功</returns>
-        public virtual async Task<int> DeleteEntitySavedAsync(T t)
+        public virtual Task<int> DeleteEntitySavedAsync(T t)
         {
             BaseDal.DeleteEntity(t);
-            return await SaveChangesAsync();
+            return SaveChangesAsync();
         }
 
         /// <summary>
@@ -920,10 +921,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="key">更新键规则</param>
         /// <param name="t">需要保存的实体</param>
         /// <returns>保存成功</returns>
-        public async Task<int> AddOrUpdateSavedAsync<TKey>(Expression<Func<T, TKey>> key, T t)
+        public Task<int> AddOrUpdateSavedAsync<TKey>(Expression<Func<T, TKey>> key, T t)
         {
             AddOrUpdate(key, t);
-            return await SaveChangesAsync();
+            return SaveChangesAsync();
         }
 
         /// <summary>
@@ -932,10 +933,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// <param name="key">更新键规则</param>
         /// <param name="entities">需要保存的实体</param>
         /// <returns>保存成功</returns>
-        public async Task<int> AddOrUpdateSavedAsync<TKey>(Expression<Func<T, TKey>> key, IEnumerable<T> entities)
+        public Task<int> AddOrUpdateSavedAsync<TKey>(Expression<Func<T, TKey>> key, IEnumerable<T> entities)
         {
             AddOrUpdate(key, entities);
-            return await SaveChangesAsync();
+            return SaveChangesAsync();
         }
 
         /// <summary>
@@ -943,10 +944,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="t">需要添加的实体</param>
         /// <returns>添加成功</returns>
-        public virtual async Task<int> AddEntitySavedAsync(T t)
+        public virtual Task<int> AddEntitySavedAsync(T t)
         {
             BaseDal.AddEntity(t);
-            return await SaveChangesAsync();
+            return SaveChangesAsync();
         }
 
         /// <summary>
@@ -962,9 +963,9 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// 统一保存数据
         /// </summary>
         /// <returns>受影响的行数</returns>
-        public virtual async Task<int> SaveChangesAsync()
+        public virtual Task<int> SaveChangesAsync()
         {
-            return await BaseDal.SaveChangesAsync();
+            return BaseDal.SaveChangesAsync();
         }
 
         /// <summary>
@@ -1013,10 +1014,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="list">实体集合</param>
         /// <returns>删除成功</returns>
-        public virtual async Task<int> DeleteEntitiesSavedAsync(IEnumerable<T> list)
+        public virtual Task<int> DeleteEntitiesSavedAsync(IEnumerable<T> list)
         {
             BaseDal.DeleteEntities(list);
-            return await SaveChangesAsync();
+            return SaveChangesAsync();
         }
 
         /// <summary>
@@ -1043,7 +1044,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
             return entities;
         }
 
-        public virtual T this[object id]
+        public virtual T this[int id]
         {
             get => GetById(id);
             set => AddEntity(value);

+ 10 - 9
src/Masuit.MyBlogs.Core/Infrastructure/Services/Interface/IBaseService.cs

@@ -1,4 +1,5 @@
-using Masuit.Tools.Models;
+using Masuit.LuceneEFCore.SearchEngine;
+using Masuit.Tools.Models;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -7,7 +8,7 @@ using System.Threading.Tasks;
 
 namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
 {
-    public interface IBaseService<T> where T : class
+    public interface IBaseService<T> where T : LuceneIndexableBaseEntity
     {
         /// <summary>
         /// 获取所有实体
@@ -414,14 +415,14 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        T GetById(object id);
+        T GetById(int id);
 
         /// <summary>
         /// 根据ID找实体(异步)
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>实体</returns>
-        Task<T> GetByIdAsync(object id);
+        Task<T> GetByIdAsync(int id);
 
         /// <summary>
         /// 高效分页查询方法
@@ -540,21 +541,21 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        bool DeleteById(object id);
+        bool DeleteById(int id);
 
         /// <summary>
         /// 根据ID删除实体并保存
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        bool DeleteByIdSaved(object id);
+        bool DeleteByIdSaved(int id);
 
         /// <summary>
         /// 根据ID删除实体并保存(异步)
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        Task<int> DeleteByIdSavedAsync(object id);
+        Task<int> DeleteByIdSavedAsync(int id);
 
         /// <summary>
         /// 删除实体并保存
@@ -743,10 +744,10 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services.Interface
         /// <returns>添加成功</returns>
         Task<IEnumerable<T>> AddEntitiesAsync(IList<T> list);
 
-        T this[object id] => GetById(id);
+        T this[int id] => GetById(id);
         List<T> this[Expression<Func<T, bool>> where] => GetQuery(where).ToList();
         public static T operator +(IBaseService<T> left, T right) => left.AddEntitySaved(right);
         public static bool operator -(IBaseService<T> left, T right) => left.DeleteEntitySaved(right);
-        public static bool operator -(IBaseService<T> left, object id) => left.DeleteByIdSaved(id);
+        public static bool operator -(IBaseService<T> left, int id) => left.DeleteByIdSaved(id);
     }
 }

+ 2 - 2
src/Masuit.MyBlogs.Core/Infrastructure/Services/PostService.cs

@@ -179,7 +179,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        public override bool DeleteByIdSaved(object id)
+        public override bool DeleteByIdSaved(int id)
         {
             base.DeleteById(id);
             return SearchEngine.SaveChanges() > 0;
@@ -201,7 +201,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Services
         /// </summary>
         /// <param name="id">实体id</param>
         /// <returns>删除成功</returns>
-        public override Task<int> DeleteByIdSavedAsync(object id)
+        public override Task<int> DeleteByIdSavedAsync(int id)
         {
             base.DeleteById(id);
             return SearchEngine.SaveChangesAsync();

+ 1 - 1
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -60,7 +60,7 @@
         <PackageReference Include="TimeZoneConverter" Version="3.5.0" />
         <PackageReference Include="WilderMinds.RssSyndication" Version="1.7.0" />
         <PackageReference Include="WinInsider.System.Net.Http.Formatting" Version="1.0.14" />
-        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="5.1.31" />
+        <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="5.1.33" />
     </ItemGroup>
     <ItemGroup>
         <Content Update="appsettings.json">

+ 2 - 4
src/Masuit.MyBlogs.Core/Models/Entity/SearchDetails.cs

@@ -1,3 +1,4 @@
+using Masuit.LuceneEFCore.SearchEngine;
 using System;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
@@ -8,16 +9,13 @@ namespace Masuit.MyBlogs.Core.Models.Entity
     /// ËÑË÷Ïêϸ¼Ç¼
     /// </summary>
     [Table("SearchDetails")]
-    public class SearchDetails
+    public class SearchDetails : LuceneIndexableBaseEntity
     {
         public SearchDetails()
         {
             SearchTime = DateTime.Now;
         }
 
-        [Key]
-        public int Id { get; set; }
-
         /// <summary>
         /// ¹Ø¼ü´Ê
         /// </summary>

+ 1 - 1
src/Masuit.MyBlogs.Core/Startup.cs

@@ -16,8 +16,8 @@ using Masuit.MyBlogs.Core.Extensions.Hangfire;
 using Masuit.MyBlogs.Core.Infrastructure;
 using Masuit.MyBlogs.Core.Models.DTO;
 using Masuit.MyBlogs.Core.Models.ViewModel;
+using Masuit.Tools.Config;
 using Masuit.Tools.Core.AspNetCore;
-using Masuit.Tools.Core.Config;
 using Masuit.Tools.Core.Net;
 using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;