网站首页 网站源码
using System;
using System.Collections.Generic;
using System.Linq;
using AutoMapper;
using Dpz.Core.EnumLibrary;
using Dpz.Core.Infrastructure;
using Dpz.Core.Public.Entity;
namespace Dpz.Core.Public.ViewModel;
/// <summary>
/// 评论 平铺
/// </summary>
public class VmCommentFlat : IHaveCustomMapping
{
public string Id { get; set; }
/// <summary>
/// 评论类型
/// </summary>
public CommentNode Node { get; set; }
/// <summary>
/// 关联
/// </summary>
public string Relation { get; set; }
/// <summary>
/// 回复时间
/// </summary>
public DateTime PublishTime { get; set; }
/// <summary>
/// 回复内容
/// </summary>
public string CommentText { get; set; }
/// <summary>
/// 回复ID
/// </summary>
public List<string> Replies { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string NickName { get; set; }
/// <summary>
/// 头像
/// </summary>
public string Avatar { get; set; }
/// <summary>
/// 身份标识
/// </summary>
public string Identity { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 网站
/// </summary>
public string Site { get; set; }
/// <summary>
/// 是否匿名评论
/// </summary>
public bool IsGuest { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public bool? IsDelete { get; set; }
public void CreateMappings(MapperConfigurationExpression cfg)
{
cfg.CreateMap<Comment, VmCommentFlat>().ConvertUsing((entity, _) =>
{
var viewModel = new VmCommentFlat
{
Id = entity.Id.ToString(),
Node = entity.Node,
Relation = entity.Relation,
PublishTime = entity.PublishTime.ToLocalTime(),
CommentText = entity.CommentText,
Replies = entity.Replies == null
? new List<string>()
: entity.Replies.Select(x => x.ToString()).ToList(),
NickName = entity.Commenter.NickName,
IsDelete = entity.IsDelete
};
if (entity.Commenter is GuestCommenter guestCommenter)
{
viewModel.IsGuest = true;
viewModel.Email = guestCommenter.Email;
viewModel.Site = guestCommenter.Site;
}
else if (entity.Commenter is MembleCommenter membleCommenter)
{
viewModel.IsGuest = false;
viewModel.Identity = membleCommenter.Identity;
viewModel.Avatar = membleCommenter.Avatar;
}
return viewModel;
});
}
}
上述代码定义了一个名为 VmCommentFlat
的视图模型类,主要用于表示评论的扁平化结构。这个类实现了 IHaveCustomMapping
接口,允许使用 AutoMapper 进行自定义映射。以下是代码的主要功能和组成部分的详细解释:
CommentNode
枚举表示。DateTime
。CreateMappings
方法用于配置 AutoMapper 的映射规则,将 Comment
实体映射到 VmCommentFlat
视图模型。具体步骤如下:
cfg.CreateMap<Comment, VmCommentFlat>()
创建从 Comment
到 VmCommentFlat
的映射。ConvertUsing
方法定义自定义转换逻辑。Comment
实体的属性映射到 VmCommentFlat
的相应属性。Id
被转换为字符串。PublishTime
被转换为本地时间。Replies
列表被处理为字符串列表。NickName
和 IsDelete
直接映射。GuestCommenter
或 MembleCommenter
)设置不同的属性:GuestCommenter
,则设置 IsGuest
为 true
,并映射 Email
和 Site
。MembleCommenter
,则设置 IsGuest
为 false
,并映射 Identity
和 Avatar
。这个类的主要功能是将 Comment
实体转换为一个扁平化的视图模型 VmCommentFlat
,以便在前端展示评论信息。通过使用 AutoMapper,代码实现了高效的属性映射和类型处理,简化了数据转换的过程。