Browse Source

升级efcore api

懒得勤快 2 years ago
parent
commit
09b3440a61

+ 9 - 9
src/Masuit.MyBlogs.Core/Controllers/HomeController.cs

@@ -20,7 +20,6 @@ using Microsoft.AspNetCore.Mvc;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.Net.Http.Headers;
 using System.ComponentModel.DataAnnotations;
-using System.Linq.Dynamic.Core;
 using System.Linq.Expressions;
 using System.Runtime.InteropServices;
 using System.Text;
@@ -59,7 +58,7 @@ public class HomeController : BaseController
         var banners = AdsService.GetsByWeightedPrice(8, AdvertiseType.Banner, Request.Location()).OrderByRandom().ToList();
         var fastShares = fastShareService.GetAllFromCache(s => s.Sort);
         var postsQuery = PostService.GetQuery(PostBaseWhere()); //准备文章的查询
-        var posts = await postsQuery.Where(p => !p.IsFixedTop).OrderBy(OrderBy.ModifyDate.GetDisplay() + " desc").ToPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
+        var posts = await postsQuery.Where(p => !p.IsFixedTop).OrderByDescending(p => EF.Property<object>(p, OrderBy.ModifyDate.GetDisplay())).ToPagedListAsync<Post, PostDto>(1, 15, MapperConfig);
         posts.Data.InsertRange(0, postsQuery.Where(p => p.IsFixedTop).OrderByDescending(p => p.ModifyDate).ProjectTo<PostDto>(MapperConfig).FromCache().ToList());
         var viewModel = GetIndexPageViewModel();
         viewModel.Banner = banners;
@@ -94,7 +93,7 @@ public class HomeController : BaseController
         var posts = orderBy switch
         {
             OrderBy.Trending => await postsQuery.Where(p => !p.IsFixedTop).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(t => t.Count)).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-            _ => await postsQuery.Where(p => !p.IsFixedTop).OrderBy((orderBy ?? OrderBy.ModifyDate).GetDisplay() + " desc").ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+            _ => await postsQuery.Where(p => !p.IsFixedTop).OrderByDescending(p => EF.Property<object>(p, (orderBy ?? OrderBy.ModifyDate).GetDisplay())).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
         };
         if (page == 1)
         {
@@ -137,7 +136,7 @@ public class HomeController : BaseController
         var posts = orderBy switch
         {
             OrderBy.Trending => await queryable.OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-            _ => await queryable.OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+            _ => await queryable.OrderByDescending(p => p.IsFixedTop).ThenByDescending(p => EF.Property<object>(p, (orderBy ?? OrderBy.ModifyDate).GetDisplay())).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
         };
         var viewModel = GetIndexPageViewModel();
         ViewBag.Tag = tag;
@@ -183,7 +182,7 @@ public class HomeController : BaseController
         var posts = orderBy switch
         {
             OrderBy.Trending => await queryable.OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-            _ => await queryable.OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+            _ => await queryable.OrderByDescending(p => p.IsFixedTop).ThenByDescending(p => EF.Property<object>(p, (orderBy ?? OrderBy.ModifyDate).GetDisplay())).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
         };
         var viewModel = GetIndexPageViewModel();
         viewModel.Posts = posts;
@@ -216,7 +215,7 @@ public class HomeController : BaseController
         var posts = orderBy switch
         {
             OrderBy.Trending => await PostService.GetQuery(where).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-            _ => await PostService.GetQuery(where).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+            _ => await PostService.GetQuery(where).OrderByDescending(p => p.IsFixedTop).ThenByDescending(p => EF.Property<object>(p, (orderBy ?? OrderBy.ModifyDate).GetDisplay())).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
         };
         var viewModel = GetIndexPageViewModel();
         ViewBag.Author = author;
@@ -251,7 +250,7 @@ public class HomeController : BaseController
         var posts = orderBy switch
         {
             OrderBy.Trending => await PostService.GetQuery(PostBaseWhere().And(p => cids.Contains(p.CategoryId))).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-            _ => await PostService.GetQuery(PostBaseWhere().And(p => cids.Contains(p.CategoryId))).OrderBy($"{nameof(PostDto.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+            _ => await PostService.GetQuery(PostBaseWhere().And(p => cids.Contains(p.CategoryId))).OrderByDescending(p => p.IsFixedTop).ThenByDescending(p => EF.Property<object>(p, (orderBy ?? OrderBy.ModifyDate).GetDisplay())).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
         };
         var viewModel = GetIndexPageViewModel();
         viewModel.Posts = posts;
@@ -328,12 +327,13 @@ public class HomeController : BaseController
         var notices = NoticeService.GetPagesFromCache<DateTime, NoticeDto>(1, 5, n => n.NoticeStatus == NoticeStatus.Normal, n => n.ModifyDate, false); //加载前5条公告
         using var cats = CategoryService.GetQuery(c => c.Status == Status.Available && c.Post.Count > 0).Include(c => c.Parent).OrderBy(c => c.Name).ThenBy(c => c.Path).AsNoTracking().FromCache().ToPooledList(); //加载分类目录
         var hotSearches = RedisHelper.Get<PooledList<KeywordsRank>>("SearchRank:Week").AsNotNull().Take(10).ToPooledList(); //热词统计
-        var hot5Post = postsQuery.OrderBy((new Random().Next() % 3) switch
+        var orderby = (new Random().Next() % 3) switch
         {
             1 => nameof(OrderBy.VoteUpCount),
             2 => nameof(OrderBy.AverageViewCount),
             _ => nameof(OrderBy.TotalViewCount)
-        } + " desc").Skip(0).Take(5).FromCache().ToPooledList(); //热门文章
+        };
+        var hot5Post = postsQuery.OrderByDescending(p => EF.Property<object>(p, orderby)).Skip(0).Take(5).FromCache().ToPooledList(); //热门文章
         var tagdic = PostService.GetTags().OrderByRandom().Take(20).ToDictionary(x => x.Key, x => Math.Min(x.Value + 12, 32)); //统计标签
         return new HomePageViewModel
         {

+ 4 - 12
src/Masuit.MyBlogs.Core/Controllers/LinksController.cs

@@ -6,6 +6,7 @@ using Masuit.MyBlogs.Core.Models.Enum;
 using Masuit.Tools;
 using Masuit.Tools.AspNetCore.ModelBinder;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
 using System.Text;
 using Z.EntityFramework.Plus;
 
@@ -175,10 +176,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [MyAuthorize]
         public async Task<ActionResult> ToggleWhitelist(int id)
         {
-            var b = await LinksService.GetQuery(m => m.Id == id).UpdateFromQueryAsync(m => new Links()
-            {
-                Except = !m.Except
-            }) > 0;
+            var b = await LinksService.GetQuery(m => m.Id == id).ExecuteUpdateAsync(e => e.SetProperty(c => c.Except, c => !c.Except)) > 0;
             return ResultData(null, b, b ? "切换成功!" : "切换失败!");
         }
 
@@ -191,10 +189,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [MyAuthorize]
         public async Task<ActionResult> ToggleRecommend(int id)
         {
-            var b = await LinksService.GetQuery(m => m.Id == id).UpdateFromQueryAsync(m => new Links()
-            {
-                Recommend = !m.Recommend
-            }) > 0;
+            var b = await LinksService.GetQuery(m => m.Id == id).ExecuteUpdateAsync(e => e.SetProperty(c => c.Recommend, c => !c.Recommend)) > 0;
             return ResultData(null, b, b ? "切换成功!" : "切换失败!");
         }
 
@@ -207,10 +202,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [MyAuthorize]
         public async Task<ActionResult> Toggle(int id)
         {
-            var b = await LinksService.GetQuery(m => m.Id == id).UpdateFromQueryAsync(m => new Links()
-            {
-                Status = m.Status == Status.Unavailable ? Status.Available : Status.Unavailable
-            }) > 0;
+            var b = await LinksService.GetQuery(m => m.Id == id).ExecuteUpdateAsync(s => s.SetProperty(e => e.Status, m => m.Status == Status.Unavailable ? Status.Available : Status.Unavailable)) > 0;
             QueryCacheManager.ExpireType<Links>();
             return ResultData(null, b, b ? "切换成功!" : "切换失败!");
         }

+ 4 - 12
src/Masuit.MyBlogs.Core/Controllers/MsgController.cs

@@ -18,6 +18,7 @@ using Masuit.Tools.Models;
 using Masuit.Tools.Strings;
 using Masuit.Tools.Systems;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
 using Microsoft.Net.Http.Headers;
 using System.ComponentModel.DataAnnotations;
 using System.Text;
@@ -307,10 +308,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [MyAuthorize]
         public async Task<ActionResult> Read(int id)
         {
-            await MessageService.GetQuery(m => m.Id == id).UpdateFromQueryAsync(m => new InternalMessage()
-            {
-                Read = true
-            });
+            await MessageService.GetQuery(m => m.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.Read, true));
             return Content("ok");
         }
 
@@ -322,10 +320,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [MyAuthorize]
         public async Task<ActionResult> Unread(int id)
         {
-            await MessageService.GetQuery(m => m.Id == id).UpdateFromQueryAsync(m => new InternalMessage()
-            {
-                Read = false
-            });
+            await MessageService.GetQuery(m => m.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.Read, false));
             return Content("ok");
         }
 
@@ -337,10 +332,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [MyAuthorize]
         public async Task<ActionResult> MarkRead(int id)
         {
-            await MessageService.GetQuery(m => m.Id <= id).UpdateFromQueryAsync(m => new InternalMessage()
-            {
-                Read = true
-            });
+            await MessageService.GetQuery(m => m.Id <= id).ExecuteUpdateAsync(s => s.SetProperty(m => m.Read, true));
             return ResultData(null);
         }
 

+ 9 - 31
src/Masuit.MyBlogs.Core/Controllers/PostController.cs

@@ -36,7 +36,6 @@ using Microsoft.AspNetCore.Mvc;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.Net.Http.Headers;
 using System.ComponentModel.DataAnnotations;
-using System.Linq.Dynamic.Core;
 using System.Linq.Expressions;
 using System.Net;
 using System.Text;
@@ -238,10 +237,7 @@ public class PostController : BaseController
             return ResultData(null, false, "您刚才已经投过票了,感谢您的参与!");
         }
 
-        var b = await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
-        {
-            VoteDownCount = p.VoteDownCount + 1
-        }) > 0;
+        var b = await PostService.GetQuery(p => p.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.VoteDownCount, m => m.VoteDownCount + 1)) > 0;
         if (b)
         {
             HttpContext.Session.Set("post-vote" + id, id.GetBytes());
@@ -262,10 +258,7 @@ public class PostController : BaseController
             return ResultData(null, false, "您刚才已经投过票了,感谢您的参与!");
         }
 
-        var b = await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
-        {
-            VoteUpCount = p.VoteUpCount + 1
-        }) > 0;
+        var b = await PostService.GetQuery(p => p.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.VoteUpCount, m => m.VoteUpCount + 1)) > 0;
         if (b)
         {
             HttpContext.Session.Set("post-vote" + id, id.GetBytes());
@@ -667,7 +660,7 @@ public class PostController : BaseController
         var list = orderby switch
         {
             OrderBy.Trending => await PostService.GetQuery(where).OrderByDescending(p => p.Status).ThenByDescending(p => p.IsFixedTop).ThenByDescending(p => p.PostVisitRecordStats.Sum(t => t.Count) / p.PostVisitRecordStats.Count).ToPagedListAsync<Post, PostDataModel>(page, size, MapperConfig),
-            _ => await PostService.GetQuery(where).OrderBy($"{nameof(Post.Status)} desc,{nameof(Post.IsFixedTop)} desc,{orderby.GetDisplay()} desc").ToPagedListAsync<Post, PostDataModel>(page, size, MapperConfig)
+            _ => await PostService.GetQuery(where).OrderByDescending(p => p.Status).ThenByDescending(p => p.IsFixedTop).ThenByDescending(p => EF.Property<object>(p, orderby.GetDisplay())).ToPagedListAsync<Post, PostDataModel>(page, size, MapperConfig)
         };
         foreach (var item in list.Data)
         {
@@ -1009,10 +1002,7 @@ public class PostController : BaseController
     [HttpPost("post/{id}/ChangeCategory/{cid}")]
     public async Task<ActionResult> ChangeCategory(int id, int cid)
     {
-        await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
-        {
-            CategoryId = cid
-        });
+        await PostService.GetQuery(p => p.Id == id).ExecuteUpdateAsync(s => s.SetProperty(p => p.CategoryId, cid));
         return Ok();
     }
 
@@ -1042,10 +1032,7 @@ public class PostController : BaseController
     [MyAuthorize]
     public async Task<ActionResult> Refresh(int id, CancellationToken cancellationToken = default)
     {
-        await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
-        {
-            ModifyDate = DateTime.Now
-        }, cancellationToken);
+        await PostService.GetQuery(p => p.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.ModifyDate, DateTime.Now), cancellationToken: cancellationToken);
         return RedirectToAction("Details", new { id });
     }
 
@@ -1059,10 +1046,7 @@ public class PostController : BaseController
     [HttpPost("post/block/{id}")]
     public async Task<ActionResult> Block(int id, CancellationToken cancellationToken = default)
     {
-        var b = await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
-        {
-            Status = Status.Forbidden
-        }, cancellationToken) > 0;
+        var b = await PostService.GetQuery(p => p.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.Status, Status.Forbidden), cancellationToken: cancellationToken) > 0;
         return b ? ResultData(null, true, "操作成功!") : ResultData(null, false, "操作失败!");
     }
 
@@ -1076,10 +1060,7 @@ public class PostController : BaseController
     [HttpPost("post/{id}/rss-switch")]
     public async Task<ActionResult> RssSwitch(int id, CancellationToken cancellationToken = default)
     {
-        await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
-        {
-            Rss = !p.Rss
-        }, cancellationToken);
+        await PostService.GetQuery(p => p.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.Rss, p => !p.Rss), cancellationToken: cancellationToken);
         return ResultData(null, message: "操作成功");
     }
 
@@ -1093,10 +1074,7 @@ public class PostController : BaseController
     [HttpPost("post/{id}/locked-switch")]
     public async Task<ActionResult> LockedSwitch(int id, CancellationToken cancellationToken = default)
     {
-        await PostService.GetQuery(p => p.Id == id).UpdateFromQueryAsync(p => new Post()
-        {
-            Locked = !p.Locked
-        }, cancellationToken);
+        await PostService.GetQuery(p => p.Id == id).ExecuteUpdateAsync(s => s.SetProperty(m => m.Locked, p => !p.Locked), cancellationToken: cancellationToken);
         return ResultData(null, message: "操作成功");
     }
 
@@ -1322,7 +1300,7 @@ public class PostController : BaseController
     [ProducesResponseType(typeof(List<string>), (int)HttpStatusCode.OK)]
     public async Task<IActionResult> GetRegions(string name)
     {
-        return ResultData(await PostService.GetAll().Select(name).Distinct().ToDynamicListAsync());
+        return ResultData(await PostService.GetAll().Select(p => EF.Property<string>(p, name)).Distinct().ToListAsync());
     }
 
     #endregion 后端管理

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

@@ -12,8 +12,8 @@ using Masuit.Tools.Core.Net;
 using Masuit.Tools.Linq;
 using Masuit.Tools.Systems;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
 using System.ComponentModel.DataAnnotations;
-using System.Linq.Dynamic.Core;
 using System.Runtime.InteropServices;
 
 namespace Masuit.MyBlogs.Core.Controllers
@@ -49,7 +49,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             var posts = orderBy switch
             {
                 OrderBy.Trending => await PostService.GetQuery(PostBaseWhere().And(p => p.Seminar.Any(x => x.Id == id))).OrderByDescending(p => p.PostVisitRecordStats.Where(e => e.Date >= h24).Sum(e => e.Count)).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig),
-                _ => await PostService.GetQuery(PostBaseWhere().And(p => p.Seminar.Any(x => x.Id == id))).OrderBy($"{nameof(Post.IsFixedTop)} desc,{(orderBy ?? OrderBy.ModifyDate).GetDisplay()} desc").ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
+                _ => await PostService.GetQuery(PostBaseWhere().And(p => p.Seminar.Any(x => x.Id == id))).OrderByDescending(p => p.IsFixedTop).ThenByDescending(p => EF.Property<object>(p, (orderBy ?? OrderBy.ModifyDate).GetDisplay())).ToPagedListAsync<Post, PostDto>(page, size, MapperConfig)
             };
             ViewBag.Id = s.Id;
             ViewBag.Title = s.Title;

+ 2 - 6
src/Masuit.MyBlogs.Core/Controllers/ShareController.cs

@@ -2,6 +2,7 @@
 using Masuit.MyBlogs.Core.Models.Entity;
 using Masuit.Tools.AspNetCore.ModelBinder;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
 using Z.EntityFramework.Plus;
 
 namespace Masuit.MyBlogs.Core.Controllers
@@ -60,12 +61,7 @@ namespace Masuit.MyBlogs.Core.Controllers
         [HttpPost]
         public async Task<ActionResult> Update([FromBodyOrDefault] FastShare model)
         {
-            var b = await FastShareService.GetQuery(s => s.Id == model.Id).UpdateFromQueryAsync(s => new FastShare()
-            {
-                Title = model.Title,
-                Link = model.Link,
-                Sort = model.Sort
-            }) > 0;
+            var b = await FastShareService.GetQuery(s => s.Id == model.Id).ExecuteUpdateAsync(s => s.SetProperty(e => e.Title, model.Title).SetProperty(e => e.Link, model.Link).SetProperty(e => e.Sort, model.Sort)) > 0;
             QueryCacheManager.ExpireType<FastShare>();
             return ResultData(null, b, b ? "更新成功" : "更新失败");
         }

+ 5 - 19
src/Masuit.MyBlogs.Core/Extensions/Hangfire/HangfireBackJob.cs

@@ -9,6 +9,7 @@ using Masuit.MyBlogs.Core.Models.Enum;
 using Masuit.Tools;
 using Masuit.Tools.Strings;
 using Masuit.Tools.Systems;
+using Microsoft.EntityFrameworkCore;
 
 namespace Masuit.MyBlogs.Core.Extensions.Hangfire
 {
@@ -152,21 +153,9 @@ namespace Masuit.MyBlogs.Core.Extensions.Hangfire
             var noticeService = _serviceScope.ServiceProvider.GetRequiredService<INoticeService>();
             searchDetailsService.DeleteEntitySaved(s => s.SearchTime < time);
             TrackData.DumpLog();
-            advertisementService.GetQuery(a => DateTime.Now >= a.ExpireTime).UpdateFromQuery(a => new Advertisement()
-            {
-                Status = Status.Unavailable
-            });
-            noticeService.GetQuery(n => n.NoticeStatus == NoticeStatus.UnStart && n.StartTime < DateTime.Now).UpdateFromQuery(n => new Notice()
-            {
-                NoticeStatus = NoticeStatus.Normal,
-                PostDate = DateTime.Now,
-                ModifyDate = DateTime.Now
-            });
-            noticeService.GetQuery(n => n.NoticeStatus == NoticeStatus.Normal && n.EndTime < DateTime.Now).UpdateFromQuery(n => new Notice()
-            {
-                NoticeStatus = NoticeStatus.Expired,
-                ModifyDate = DateTime.Now
-            });
+            advertisementService.GetQuery(a => DateTime.Now >= a.ExpireTime).ExecuteUpdate(s => s.SetProperty(a => a.Status, Status.Unavailable));
+            noticeService.GetQuery(n => n.NoticeStatus == NoticeStatus.UnStart && n.StartTime < DateTime.Now).ExecuteUpdate(s => s.SetProperty(e => e.NoticeStatus, NoticeStatus.Normal).SetProperty(e => e.PostDate, DateTime.Now).SetProperty(e => e.ModifyDate, DateTime.Now));
+            noticeService.GetQuery(n => n.NoticeStatus == NoticeStatus.Normal && n.EndTime < DateTime.Now).ExecuteUpdate(s => s.SetProperty(e => e.NoticeStatus, NoticeStatus.Expired).SetProperty(e => e.ModifyDate, DateTime.Now));
         }
 
         /// <summary>
@@ -175,10 +164,7 @@ namespace Masuit.MyBlogs.Core.Extensions.Hangfire
         public void EverymonthJob()
         {
             var advertisementService = _serviceScope.ServiceProvider.GetRequiredService<IAdvertisementService>();
-            advertisementService.GetAll().UpdateFromQuery(a => new Advertisement()
-            {
-                DisplayCount = 0
-            });
+            advertisementService.GetAll().ExecuteUpdate(s => s.SetProperty(a => a.DisplayCount, 0));
         }
 
         /// <summary>

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

@@ -445,7 +445,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>删除成功</returns>
         public virtual bool DeleteById(int id)
         {
-            return DataContext.Set<T>().Where(t => t.Id == id).Delete() > 0;
+            return DataContext.Set<T>().Where(t => t.Id == id).ExecuteDelete() > 0;
         }
 
         /// <summary>
@@ -455,7 +455,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>删除成功</returns>
         public virtual Task<int> DeleteByIdAsync(int id)
         {
-            return DataContext.Set<T>().Where(t => t.Id == id).DeleteAsync();
+            return DataContext.Set<T>().Where(t => t.Id == id).ExecuteDeleteAsync();
         }
 
         /// <summary>
@@ -478,7 +478,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>删除成功</returns>
         public virtual int DeleteEntity(Expression<Func<T, bool>> where)
         {
-            return DataContext.Set<T>().Where(where).Delete();
+            return DataContext.Set<T>().Where(where).ExecuteDelete();
         }
 
         /// <summary>

+ 1 - 5
src/Masuit.MyBlogs.Core/Infrastructure/Services/AdvertisementService.cs

@@ -86,11 +86,7 @@ public partial class AdvertisementService : BaseService<Advertisement>, IAdverti
             }
 
             var ids = list.Select(a => a.Id).ToArray();
-            GetQuery(a => ids.Contains(a.Id)).UpdateFromQuery(a => new Advertisement
-            {
-                DisplayCount = a.DisplayCount + 1
-            });
-
+            GetQuery(a => ids.Contains(a.Id)).ExecuteUpdate(a => a.SetProperty(a => a.DisplayCount, a => a.DisplayCount + 1));
             return list;
         });
     }

+ 2 - 3
src/Masuit.MyBlogs.Core/Masuit.MyBlogs.Core.csproj

@@ -53,13 +53,13 @@
         <PackageReference Include="IP2Region" Version="1.2.0" />
         <PackageReference Include="Karambolo.AspNetCore.Bundling.NUglify" Version="3.6.0" />
         <PackageReference Include="Markdig" Version="0.30.4" />
-        <PackageReference Include="Masuit.Tools.Excel" Version="1.2.3.3" />
+        <PackageReference Include="Masuit.Tools.Excel" Version="1.2.3.4" />
         <PackageReference Include="MaxMind.GeoIP2" Version="5.1.0" />
         <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="7.0.0" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />
         <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="7.0.0" />
         <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="7.0.0" />
-        <PackageReference Include="Microsoft.Graph" Version="4.46.0" />
+        <PackageReference Include="Microsoft.Graph" Version="4.47.0" />
         <PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
         <PackageReference Include="MiniProfiler.AspNetCore.Mvc" Version="4.2.22" />
         <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.0-rc.2" />
@@ -67,7 +67,6 @@
         <PackageReference Include="MiniProfiler.EntityFrameworkCore" Version="4.2.22" />
         <PackageReference Include="PanGu.HighLight" Version="1.0.0" />
         <PackageReference Include="SixLabors.ImageSharp.Web" Version="2.0.2" />
-        <PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.22" />
         <PackageReference Include="TimeZoneConverter" Version="6.0.1" />
         <PackageReference Include="WilderMinds.RssSyndication" Version="1.7.0" />
         <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="7.0.0-rc.2.22472.11-04" />

+ 10 - 0
src/Masuit.MyBlogs.Core/Startup.cs

@@ -14,6 +14,8 @@ using Masuit.MyBlogs.Core.Extensions.Firewall;
 using Masuit.MyBlogs.Core.Extensions.Hangfire;
 using Masuit.MyBlogs.Core.Infrastructure;
 using Masuit.MyBlogs.Core.Models.DTO;
+using Masuit.MyBlogs.Core.Models.Entity;
+using Masuit.MyBlogs.Core.Models.Enum;
 using Masuit.MyBlogs.Core.Models.ViewModel;
 using Masuit.Tools.AspNetCore.Mime;
 using Masuit.Tools.Config;
@@ -171,9 +173,17 @@ namespace Masuit.MyBlogs.Core
         /// <param name="luceneIndexerOptions"></param>
         public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHangfireBackJob hangfire, LuceneIndexerOptions luceneIndexerOptions, DataContext maindb, LoggerDbContext loggerdb)
         {
+            maindb.FastShare.AddOrUpdate(s => new[] { s.Title, s.Link }, new[]{new FastShare
+            {
+                Status = Status.Default,
+                Title = "title",
+                Link = "link",
+                Sort = 0
+            }});
             ServiceProvider = app.ApplicationServices;
             maindb.Database.EnsureCreated();
             loggerdb.Database.EnsureCreated();
+            maindb.Advertisements.Where(a => a.Id == 159).ExecuteUpdate(e => e.SetProperty(a => a.DisplayCount, a => a.DisplayCount + 1));
             app.InitSettings();
             app.UseLuceneSearch(env, hangfire, luceneIndexerOptions);
             app.UseForwardedHeaders().UseCertificateForwarding(); // X-Forwarded-For