瀏覽代碼

升级AutoMapper到9.0

懒得勤快 6 年之前
父節點
當前提交
209c6b9741

+ 4 - 2
src/Masuit.MyBlogs.Core/Common/CommonHelper.cs

@@ -1,7 +1,9 @@
-using HtmlAgilityPack;
+using AutoMapper;
+using HtmlAgilityPack;
 using IP2Region;
 using Masuit.Tools;
 using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Net.Http.Headers;
 using System;
 using System.Collections.Concurrent;
@@ -153,7 +155,7 @@ namespace Masuit.MyBlogs.Core.Common
         /// <typeparam name="T"></typeparam>
         /// <param name="source"></param>
         /// <returns></returns>
-        public static T Mapper<T>(this object source) where T : class => AutoMapper.Mapper.Map<T>(source);
+        public static T Mapper<T>(this object source) where T : class => Startup.AutofacContainer.GetRequiredService<IMapper>().Map<T>(source);
 
         /// <summary>
         /// 发送邮件

+ 78 - 0
src/Masuit.MyBlogs.Core/Configs/MappingProfile.cs

@@ -0,0 +1,78 @@
+using AutoMapper;
+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 System.Linq;
+
+namespace Masuit.MyBlogs.Core.Configs
+{
+    /// <summary>
+    /// 注册automapper
+    /// </summary>
+    public class MappingProfile : Profile
+    {
+        public MappingProfile()
+        {
+            CreateMap<Broadcast, BroadcastInputDto>().ReverseMap();
+            CreateMap<Broadcast, BroadcastOutputDto>().ReverseMap();
+            CreateMap<BroadcastOutputDto, BroadcastInputDto>().ReverseMap();
+
+            CreateMap<Category, CategoryInputDto>().ReverseMap();
+            CreateMap<Category, CategoryOutputDto>().ForMember(c => c.TotalPostCount, e => e.MapFrom(c => c.Post.Count)).ForMember(c => c.PendedPostCount, e => e.MapFrom(c => c.Post.Count())).ReverseMap();
+            CreateMap<CategoryInputDto, CategoryOutputDto>().ReverseMap();
+
+            CreateMap<Comment, CommentInputDto>().ReverseMap();
+            CreateMap<Comment, CommentOutputDto>().ReverseMap();
+            CreateMap<CommentInputDto, CommentOutputDto>().ReverseMap();
+            CreateMap<Comment, CommentViewModel>().ForMember(c => c.CommentDate, e => e.MapFrom(c => c.CommentDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
+
+            CreateMap<LeaveMessage, LeaveMessageInputDto>().ReverseMap();
+            CreateMap<LeaveMessage, LeaveMessageOutputDto>().ReverseMap();
+            CreateMap<LeaveMessageInputDto, LeaveMessageOutputDto>().ReverseMap();
+            CreateMap<LeaveMessage, LeaveMessageViewModel>().ForMember(l => l.PostDate, e => e.MapFrom(l => l.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
+
+            CreateMap<Links, LinksInputDto>().ReverseMap();
+            CreateMap<Links, LinksOutputDto>().ReverseMap();
+            CreateMap<LinksInputDto, LinksOutputDto>().ReverseMap();
+
+            CreateMap<Menu, MenuInputDto>().ReverseMap();
+            CreateMap<Menu, MenuOutputDto>().ReverseMap();
+            CreateMap<MenuInputDto, MenuOutputDto>().ReverseMap();
+
+            CreateMap<Misc, MiscInputDto>().ReverseMap();
+            CreateMap<Misc, MiscOutputDto>().ReverseMap();
+            CreateMap<MiscInputDto, MiscOutputDto>().ReverseMap();
+            CreateMap<Misc, MiscViewModel>().ForMember(c => c.PostDate, e => e.MapFrom(c => c.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ForMember(c => c.ModifyDate, e => e.MapFrom(c => c.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
+
+            CreateMap<Notice, NoticeInputDto>().ReverseMap();
+            CreateMap<Notice, NoticeOutputDto>().ReverseMap();
+            CreateMap<NoticeInputDto, NoticeOutputDto>().ReverseMap();
+            CreateMap<Notice, NoticeViewModel>().ForMember(c => c.PostDate, e => e.MapFrom(c => c.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ForMember(c => c.ModifyDate, e => e.MapFrom(c => c.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
+
+            CreateMap<Post, PostInputDto>().ReverseMap();
+            CreateMap<Post, PostModelBase>();
+            CreateMap<Post, PostHistoryVersion>().ForMember(v => v.PostId, e => e.MapFrom(p => p.Id));
+            CreateMap<Post, PostOutputDto>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ForMember(p => p.CommentCount, e => e.MapFrom(p => p.Comment.Count(c => c.Status == Status.Pended))).ReverseMap();
+            CreateMap<PostInputDto, PostOutputDto>().ReverseMap();
+            CreateMap<PostHistoryVersion, PostOutputDto>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ReverseMap();
+            CreateMap<Post, PostViewModel>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ForMember(p => p.PostDate, e => e.MapFrom(p => p.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ForMember(p => p.ModifyDate, e => e.MapFrom(p => p.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
+
+            CreateMap<SearchDetails, SearchDetailsInputDto>().ReverseMap();
+            CreateMap<SearchDetails, SearchDetailsOutputDto>().ReverseMap();
+            CreateMap<SearchDetailsInputDto, SearchDetailsOutputDto>().ReverseMap();
+
+            CreateMap<UserInfo, UserInfoInputDto>().ReverseMap();
+            CreateMap<UserInfo, UserInfoOutputDto>().ReverseMap();
+            CreateMap<UserInfoInputDto, UserInfoOutputDto>().ReverseMap();
+
+            CreateMap<LoginRecord, LoginRecordOutputDto>().ReverseMap();
+
+            CreateMap<Seminar, SeminarInputDto>().ReverseMap();
+            CreateMap<Seminar, SeminarOutputDto>().ReverseMap();
+            CreateMap<SeminarInputDto, SeminarOutputDto>().ReverseMap();
+
+            CreateMap<SeminarPost, SeminarPostHistoryVersion>().ForMember(s => s.PostHistoryVersionId, e => e.MapFrom(s => s.PostId)).ReverseMap();
+        }
+    }
+}

+ 0 - 84
src/Masuit.MyBlogs.Core/Configs/RegisterAutomapper.cs

@@ -1,84 +0,0 @@
-using AutoMapper;
-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 System.Linq;
-
-namespace Masuit.MyBlogs.Core.Configs
-{
-    /// <summary>
-    /// 注册automapper
-    /// </summary>
-    public static class RegisterAutomapper
-    {
-        /// <summary>
-        /// 初始化
-        /// </summary>
-        public static void Excute()
-        {
-            Mapper.Initialize(m =>
-            {
-                m.CreateMap<Broadcast, BroadcastInputDto>().ReverseMap();
-                m.CreateMap<Broadcast, BroadcastOutputDto>().ReverseMap();
-                m.CreateMap<BroadcastOutputDto, BroadcastInputDto>().ReverseMap();
-
-                m.CreateMap<Category, CategoryInputDto>().ReverseMap();
-                m.CreateMap<Category, CategoryOutputDto>().ForMember(c => c.TotalPostCount, e => e.MapFrom(c => c.Post.Count)).ForMember(c => c.PendedPostCount, e => e.MapFrom(c => c.Post.Count(p => p.Status == Status.Pended))).ReverseMap();
-                m.CreateMap<CategoryInputDto, CategoryOutputDto>().ReverseMap();
-
-                m.CreateMap<Comment, CommentInputDto>().ReverseMap();
-                m.CreateMap<Comment, CommentOutputDto>().ReverseMap();
-                m.CreateMap<CommentInputDto, CommentOutputDto>().ReverseMap();
-                m.CreateMap<Comment, CommentViewModel>().ForMember(c => c.CommentDate, e => e.MapFrom(c => c.CommentDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
-
-                m.CreateMap<LeaveMessage, LeaveMessageInputDto>().ReverseMap();
-                m.CreateMap<LeaveMessage, LeaveMessageOutputDto>().ReverseMap();
-                m.CreateMap<LeaveMessageInputDto, LeaveMessageOutputDto>().ReverseMap();
-                m.CreateMap<LeaveMessage, LeaveMessageViewModel>().ForMember(l => l.PostDate, e => e.MapFrom(l => l.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
-
-                m.CreateMap<Links, LinksInputDto>().ReverseMap();
-                m.CreateMap<Links, LinksOutputDto>().ReverseMap();
-                m.CreateMap<LinksInputDto, LinksOutputDto>().ReverseMap();
-
-                m.CreateMap<Menu, MenuInputDto>().ReverseMap();
-                m.CreateMap<Menu, MenuOutputDto>().ReverseMap();
-                m.CreateMap<MenuInputDto, MenuOutputDto>().ReverseMap();
-
-                m.CreateMap<Misc, MiscInputDto>().ReverseMap();
-                m.CreateMap<Misc, MiscOutputDto>().ReverseMap();
-                m.CreateMap<MiscInputDto, MiscOutputDto>().ReverseMap();
-                m.CreateMap<Misc, MiscViewModel>().ForMember(c => c.PostDate, e => e.MapFrom(c => c.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ForMember(c => c.ModifyDate, e => e.MapFrom(c => c.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
-
-                m.CreateMap<Notice, NoticeInputDto>().ReverseMap();
-                m.CreateMap<Notice, NoticeOutputDto>().ReverseMap();
-                m.CreateMap<NoticeInputDto, NoticeOutputDto>().ReverseMap();
-                m.CreateMap<Notice, NoticeViewModel>().ForMember(c => c.PostDate, e => e.MapFrom(c => c.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ForMember(c => c.ModifyDate, e => e.MapFrom(c => c.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
-
-                m.CreateMap<Post, PostInputDto>().ReverseMap();
-                m.CreateMap<Post, PostModelBase>();
-                m.CreateMap<Post, PostHistoryVersion>().ForMember(v => v.PostId, e => e.MapFrom(p => p.Id));
-                m.CreateMap<Post, PostOutputDto>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ForMember(p => p.CommentCount, e => e.MapFrom(p => p.Comment.Count(c => c.Status == Status.Pended))).ReverseMap();
-                m.CreateMap<PostInputDto, PostOutputDto>().ReverseMap();
-                m.CreateMap<PostHistoryVersion, PostOutputDto>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ReverseMap();
-                m.CreateMap<Post, PostViewModel>().ForMember(p => p.CategoryName, e => e.MapFrom(p => p.Category.Name)).ForMember(p => p.PostDate, e => e.MapFrom(p => p.PostDate.ToString("yyyy-MM-dd HH:mm:ss"))).ForMember(p => p.ModifyDate, e => e.MapFrom(p => p.ModifyDate.ToString("yyyy-MM-dd HH:mm:ss"))).ReverseMap();
-
-                m.CreateMap<SearchDetails, SearchDetailsInputDto>().ReverseMap();
-                m.CreateMap<SearchDetails, SearchDetailsOutputDto>().ReverseMap();
-                m.CreateMap<SearchDetailsInputDto, SearchDetailsOutputDto>().ReverseMap();
-
-                m.CreateMap<UserInfo, UserInfoInputDto>().ReverseMap();
-                m.CreateMap<UserInfo, UserInfoOutputDto>().ReverseMap();
-                m.CreateMap<UserInfoInputDto, UserInfoOutputDto>().ReverseMap();
-
-                m.CreateMap<LoginRecord, LoginRecordOutputDto>().ReverseMap();
-
-                m.CreateMap<Seminar, SeminarInputDto>().ReverseMap();
-                m.CreateMap<Seminar, SeminarOutputDto>().ReverseMap();
-                m.CreateMap<SeminarInputDto, SeminarOutputDto>().ReverseMap();
-
-                m.CreateMap<SeminarPost, SeminarPostHistoryVersion>().ForMember(s => s.PostHistoryVersionId, e => e.MapFrom(s => s.PostId)).ReverseMap();
-            });
-        }
-    }
-}

+ 4 - 1
src/Masuit.MyBlogs.Core/Controllers/AdminController.cs

@@ -1,4 +1,5 @@
-using Masuit.MyBlogs.Core.Common;
+using AutoMapper;
+using Masuit.MyBlogs.Core.Common;
 using Masuit.MyBlogs.Core.Configs;
 using Masuit.MyBlogs.Core.Extensions;
 using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
@@ -25,6 +26,8 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// </summary>
         public IUserInfoService UserInfoService { get; set; }
 
+        public IMapper Mapper { get; set; }
+
         /// <summary>
         /// 返回结果json
         /// </summary>

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

@@ -1,4 +1,5 @@
-using AutoMapper.QueryableExtensions;
+using AutoMapper;
+using AutoMapper.QueryableExtensions;
 using EFSecondLevelCache.Core;
 using Masuit.MyBlogs.Core.Common;
 using Masuit.MyBlogs.Core.Configs;
@@ -40,6 +41,9 @@ namespace Masuit.MyBlogs.Core.Controllers
         /// </summary>
         public ILinksService LinksService { get; set; }
 
+        public IMapper Mapper { get; set; }
+        public MapperConfiguration MapperConfig { get; set; }
+
         /// <summary>
         /// 响应数据
         /// </summary>
@@ -144,7 +148,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             ViewBag.menus = MenuService.LoadEntitiesFromL2Cache<MenuOutputDto>(m => m.Status == Status.Available).OrderBy(m => m.Sort).ToList(); //菜单
             PageFootViewModel model = new PageFootViewModel //页脚
             {
-                Links = LinksService.LoadEntities(l => l.Status == Status.Available, l => l.Recommend, false).ThenByDescending(l => l.Weight).ThenByDescending(l => new Random().Next()).Take(40).ProjectTo<LinksOutputDto>().Cacheable().ToList()
+                Links = LinksService.LoadEntities(l => l.Status == Status.Available, l => l.Recommend, false).ThenByDescending(l => l.Weight).ThenByDescending(l => new Random().Next()).Take(40).ProjectTo<LinksOutputDto>(MapperConfig).Cacheable().ToList()
             };
             ViewBag.Footer = model;
 

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

@@ -169,7 +169,7 @@ namespace Masuit.MyBlogs.Core.Controllers
             var viewModel = GetIndexPageViewModel(1, 1, orderBy, user);
             ViewBag.CategoryName = cat.Name;
             ViewBag.Desc = cat.Description;
-            viewModel.Posts = posts.Skip(size * (page - 1)).Take(size).ProjectTo<PostOutputDto>().Cacheable().ToList();
+            viewModel.Posts = posts.Skip(size * (page - 1)).Take(size).ProjectTo<PostOutputDto>(MapperConfig).Cacheable().ToList();
             return View(viewModel);
         }
 

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

@@ -1,4 +1,5 @@
-using AutoMapper.QueryableExtensions;
+using AutoMapper;
+using AutoMapper.QueryableExtensions;
 using EFSecondLevelCache.Core;
 using Masuit.MyBlogs.Core.Infrastructure.Repository.Interface;
 using Masuit.Tools.Systems;
@@ -19,10 +20,8 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
     public class BaseRepository<T> : Disposable, IBaseRepository<T> where T : class, new()
     {
         public virtual DataContext DataContext { get; set; }
-        public BaseRepository(DataContext dbContext)
-        {
-            DataContext = dbContext;
-        }
+
+        public MapperConfiguration MapperConfig { get; set; }
 
         /// <summary>
         /// 获取所有实体
@@ -67,7 +66,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IQueryable<TDto> GetAll<TDto>() where TDto : class
         {
-            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>();
+            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig);
         }
 
         /// <summary>
@@ -77,7 +76,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IEnumerable<TDto> GetAllFromL2Cache<TDto>() where TDto : class
         {
-            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>().Cacheable();
+            return DataContext.Set<T>().AsNoTracking().ProjectTo<TDto>(MapperConfig).Cacheable();
         }
 
         /// <summary>
@@ -138,7 +137,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IQueryable<TDto> GetAll<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
-            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>();
+            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig);
         }
 
         /// <summary>
@@ -151,7 +150,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IEnumerable<TDto> GetAllFromL2Cache<TS, TDto>(Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
-            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>().Cacheable();
+            return GetAllNoTracking(orderby, isAsc).ProjectTo<TDto>(MapperConfig).Cacheable();
         }
 
         /// <summary>
@@ -230,7 +229,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IQueryable<TDto> LoadEntities<TDto>(Expression<Func<T, bool>> @where) where TDto : class
         {
-            return DataContext.Set<T>().Where(@where).AsNoTracking().ProjectTo<TDto>();
+            return DataContext.Set<T>().Where(@where).AsNoTracking().ProjectTo<TDto>(MapperConfig);
         }
 
         /// <summary>
@@ -244,7 +243,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IQueryable<TDto> LoadEntities<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
-            return LoadEntitiesNoTracking(where, orderby, isAsc).ProjectTo<TDto>();
+            return LoadEntitiesNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig);
         }
 
         /// <summary>
@@ -277,7 +276,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>实体集合</returns>
         public virtual IEnumerable<TDto> LoadEntitiesFromL2Cache<TDto>(Expression<Func<T, bool>> @where) where TDto : class
         {
-            return DataContext.Set<T>().Where(@where).AsNoTracking().ProjectTo<TDto>().Cacheable();
+            return DataContext.Set<T>().Where(@where).AsNoTracking().ProjectTo<TDto>(MapperConfig).Cacheable();
         }
 
         /// <summary>
@@ -291,7 +290,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IEnumerable<TDto> LoadEntitiesFromL2Cache<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
-            return LoadEntitiesNoTracking(where, orderby, isAsc).ProjectTo<TDto>().Cacheable();
+            return LoadEntitiesNoTracking(where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).Cacheable();
         }
 
         /// <summary>
@@ -370,7 +369,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>实体</returns>
         public virtual TDto GetFirstEntity<TDto>(Expression<Func<T, bool>> @where) where TDto : class
         {
-            return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>().FirstOrDefault();
+            return DataContext.Set<T>().Where(where).AsNoTracking().ProjectTo<TDto>(MapperConfig).FirstOrDefault();
         }
 
         /// <summary>
@@ -384,7 +383,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>实体</returns>
         public virtual TDto GetFirstEntity<TS, TDto>(Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
-            return isAsc ? DataContext.Set<T>().Where(where).OrderBy(orderby).AsNoTracking().ProjectTo<TDto>().FirstOrDefault() : DataContext.Set<T>().Where(where).OrderByDescending(orderby).AsNoTracking().ProjectTo<TDto>().FirstOrDefault();
+            return isAsc ? DataContext.Set<T>().Where(where).OrderBy(orderby).AsNoTracking().ProjectTo<TDto>(MapperConfig).FirstOrDefault() : DataContext.Set<T>().Where(where).OrderByDescending(orderby).AsNoTracking().ProjectTo<TDto>(MapperConfig).FirstOrDefault();
         }
 
         /// <summary>
@@ -516,7 +515,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual IQueryable<TDto> LoadPageEntities<TS, TDto>(int pageIndex, int pageSize, out int totalCount, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
-            return LoadPageEntitiesNoTracking(pageIndex, pageSize, out totalCount, where, orderby, isAsc).ProjectTo<TDto>();
+            return LoadPageEntitiesNoTracking(pageIndex, pageSize, out totalCount, where, orderby, isAsc).ProjectTo<TDto>(MapperConfig);
         }
 
         /// <summary>
@@ -549,7 +548,7 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
         /// <returns>还未执行的SQL语句</returns>
         public virtual EFCachedQueryable<TDto> LoadPageEntitiesFromL2Cache<TS, TDto>(int pageIndex, int pageSize, out int totalCount, Expression<Func<T, bool>> @where, Expression<Func<T, TS>> @orderby, bool isAsc = true) where TDto : class
         {
-            return LoadPageEntitiesNoTracking(pageIndex, pageSize, out totalCount, where, orderby, isAsc).ProjectTo<TDto>().Cacheable();
+            return LoadPageEntitiesNoTracking(pageIndex, pageSize, out totalCount, where, orderby, isAsc).ProjectTo<TDto>(MapperConfig).Cacheable();
         }
 
         /// <summary>

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

@@ -5,8 +5,5 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
 {
     public partial class PostRepository : BaseRepository<Post>, IPostRepository
     {
-        public PostRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 }

+ 0 - 60
src/Masuit.MyBlogs.Core/Infrastructure/Repository/Repositories.cs

@@ -5,141 +5,81 @@ namespace Masuit.MyBlogs.Core.Infrastructure.Repository
 {
     public partial class BroadcastRepository : BaseRepository<Broadcast>, IBroadcastRepository
     {
-        public BroadcastRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class CategoryRepository : BaseRepository<Category>, ICategoryRepository
     {
-        public CategoryRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class CommentRepository : BaseRepository<Comment>, ICommentRepository
     {
-        public CommentRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class DonateRepository : BaseRepository<Donate>, IDonateRepository
     {
-        public DonateRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class FastShareRepository : BaseRepository<FastShare>, IFastShareRepository
     {
-        public FastShareRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class InternalMessageRepository : BaseRepository<InternalMessage>, IInternalMessageRepository
     {
-        public InternalMessageRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class LeaveMessageRepository : BaseRepository<LeaveMessage>, ILeaveMessageRepository
     {
-        public LeaveMessageRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class LinksRepository : BaseRepository<Links>, ILinksRepository
     {
-        public LinksRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class LoginRecordRepository : BaseRepository<LoginRecord>, ILoginRecordRepository
     {
-        public LoginRecordRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class MenuRepository : BaseRepository<Menu>, IMenuRepository
     {
-        public MenuRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class MiscRepository : BaseRepository<Misc>, IMiscRepository
     {
-        public MiscRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class NoticeRepository : BaseRepository<Notice>, INoticeRepository
     {
-        public NoticeRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class PostHistoryVersionRepository : BaseRepository<PostHistoryVersion>, IPostHistoryVersionRepository
     {
-        public PostHistoryVersionRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class SearchDetailsRepository : BaseRepository<SearchDetails>, ISearchDetailsRepository
     {
-        public SearchDetailsRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class SeminarRepository : BaseRepository<Seminar>, ISeminarRepository
     {
-        public SeminarRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class SystemSettingRepository : BaseRepository<SystemSetting>, ISystemSettingRepository
     {
-        public SystemSettingRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class UserInfoRepository : BaseRepository<UserInfo>, IUserInfoRepository
     {
-        public UserInfoRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class SeminarPostRepository : BaseRepository<SeminarPost>, ISeminarPostRepository
     {
-        public SeminarPostRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class SeminarPostHistoryVersionRepository : BaseRepository<SeminarPostHistoryVersion>, ISeminarPostHistoryVersionRepository
     {
-        public SeminarPostHistoryVersionRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 
     public partial class BannerRepository : BaseRepository<Banner>, IBannerRepository
     {
-        public BannerRepository(DataContext dbContext) : base(dbContext)
-        {
-        }
     }
 }

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

@@ -23,12 +23,11 @@
   <ItemGroup>
     <PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.9.1" />
     <PackageReference Include="Aspose.Words" Version="18.11.0" />
-    <PackageReference Include="Autofac" Version="4.9.3" />
     <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.4.0" />
-    <PackageReference Include="AutoMapper" Version="8.1.1" />
+    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
     <PackageReference Include="CacheManager.Microsoft.Extensions.Caching.Memory" Version="1.2.0" />
     <PackageReference Include="CacheManager.Serialization.Json" Version="1.2.0" />
-    <PackageReference Include="CSRedisCore" Version="3.1.0" />
+    <PackageReference Include="CSRedisCore" Version="3.1.5" />
     <PackageReference Include="EFSecondLevelCache.Core" Version="2.6.1" />
     <PackageReference Include="Hangfire" Version="1.7.6" />
     <PackageReference Include="Hangfire.Autofac" Version="2.3.1" />
@@ -43,7 +42,7 @@
     <PackageReference Include="Polly" Version="7.1.0" />
     <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
     <PackageReference Include="WilderMinds.RssSyndication" Version="1.5.0" />
-    <PackageReference Include="Z.EntityFramework.Extensions.EFCore" Version="2.6.11" />
+    <PackageReference Include="Z.EntityFramework.Extensions.EFCore" Version="2.6.13" />
     <PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="2.0.7" />
     <PackageReference Include="Z.ExtensionMethods" Version="2.1.1" />
   </ItemGroup>

+ 1 - 3
src/Masuit.MyBlogs.Core/Program.cs

@@ -1,5 +1,4 @@
-using Masuit.MyBlogs.Core.Configs;
-using Masuit.MyBlogs.Core.Hubs;
+using Masuit.MyBlogs.Core.Hubs;
 using Microsoft.AspNetCore;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.Configuration;
@@ -14,7 +13,6 @@ namespace Masuit.MyBlogs.Core
         public static void Main(string[] args)
         {
             LicenseManager.AddLicense("67;100-MASUIT", "809739091397182EC1ECEA8770EB4218");
-            RegisterAutomapper.Excute();
             MyHub.Init();
             CreateWebHostBuilder(args).Build().Run();
         }

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

@@ -1,5 +1,6 @@
 using Autofac;
 using Autofac.Extensions.DependencyInjection;
+using AutoMapper;
 using CacheManager.Core;
 using CSRedis;
 using EFSecondLevelCache.Core;
@@ -146,6 +147,10 @@ namespace Masuit.MyBlogs.Core
                 options.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
             }); //解决razor视图中中文被编码的问题
 
+            var mc = new MapperConfiguration(e => e.AddProfile(new MappingProfile()));
+            services.AddAutoMapper(Assembly.GetExecutingAssembly());
+            services.AddSingleton(mc);
+            services.AddAutofac();
             ContainerBuilder builder = new ContainerBuilder();
             builder.Populate(services);
             builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).AsImplementedInterfaces().Where(t => t.Name.EndsWith("Repository") || t.Name.EndsWith("Service") || t.Name.EndsWith("Controller")).PropertiesAutowired().AsSelf().InstancePerDependency(); //注册控制器为属性注入

+ 1 - 1
src/Masuit.MyBlogs.Core/Views/Post/Details_Admin.cshtml

@@ -217,6 +217,7 @@
                                 </div>
                             </div>
                         </form>
+                        <ul class="wow media-list"></ul>
                         @if (Model.Comment.Any(c => c.Status == Status.Pended))
                         {
                             <div class="row">
@@ -229,7 +230,6 @@
                         {
                             <h4>还没有评论哦,赶紧来写评论吧</h4>
                         }
-                        <ul class="wow media-list"></ul>
                     </div>
                 </section>
             </div>

+ 9 - 1
src/Masuit.MyBlogs.Core/Views/Shared/_Aside.cshtml

@@ -114,6 +114,14 @@
 
 
 
+
+
+
+
+
+
+
+
             </symbol>
             </svg>
         </div>
@@ -173,7 +181,7 @@
                 <i class="icon-coin-yen"></i>支付宝支持本站 @Html.ActionLink("更多方式", "Donate", "Misc", null, new { @class = "pull-right text-white" })
             </div>
             <div class="panel-body">
-                <img class="img img-responsive img-thumbnail" data-original="@CommonHelper.SystemSettings["Donate"]" alt="@CommonHelper.SystemSettings["Title"]" title="@CommonHelper.SystemSettings["Title"]" />
+                <img class="img img-responsive img-thumbnail" src="@CommonHelper.SystemSettings["Donate"]" alt="@CommonHelper.SystemSettings["Title"]" title="@CommonHelper.SystemSettings["Title"]" />
             </div>
         </article>
     </section>