网站首页 网站源码
using System.ComponentModel.DataAnnotations;
using AutoMapper;
using Dpz.Core.EnumLibrary;
using Dpz.Core.Infrastructure;
using Dpz.Core.Public.Entity;
#nullable enable
namespace Dpz.Core.Public.ViewModel;
public class MembleComment:IHaveCustomMapping
{
/// <summary>
/// 评论类型
/// </summary>
[Required(ErrorMessage = "comment node is empty.")]
public required CommentNode Node { get; set; }
/// <summary>
/// 关联
/// </summary>
[Required(ErrorMessage = "relation is empty."),MaxLength(500,ErrorMessage = "relation max length 20.")]
public required string Relation { get; set; }
/// <summary>
/// 回复内容
/// </summary>
[Required(ErrorMessage = "请输入回复内容"),MaxLength(2000,ErrorMessage = "回复内容最大长度为2000")]
public required string CommentText { get; set; }
/// <summary>
/// 回复ID
/// </summary>
[MaxLength(50,ErrorMessage = "reply id max length 15")]
public string? ReplyId { get; set; }
public VmUserInfo? User { get; set; }
public void CreateMappings(MapperConfigurationExpression cfg)
{
cfg.CreateMap<MembleComment, Comment>().ConstructUsing((viewModel, _) =>
{
var entity = new Comment
{
Node = viewModel.Node,
Relation = viewModel.Relation,
CommentText = viewModel.CommentText,
Commenter = new MembleCommenter()
{
Avatar = viewModel.User?.Avatar,
Identity = viewModel.User?.Permissions?.HasFlag(Permissions.System) == true ? "管理员" : "成员",
NickName = viewModel.User?.Name
},
};
return entity;
});
}
}
这段代码定义了一个名为 MembleComment
的类,它实现了 IHaveCustomMapping
接口,并使用了 AutoMapper 库来进行对象映射。以下是对代码的详细解释:
Dpz.Core.Public.ViewModel
,表示该类属于公共视图模型部分。MembleComment
,表示这是一个与评论相关的视图模型。Node:
CommentNode
[Required]
,表示该属性是必需的,且如果为空会返回错误信息 "comment node is empty."。Relation:
string
[Required]
和 [MaxLength(500)]
,表示该属性是必需的,且最大长度为500个字符。CommentText:
string
[Required]
和 [MaxLength(2000)]
,表示该属性是必需的,且最大长度为2000个字符。ReplyId:
string?
(可空类型)[MaxLength(50)]
,表示最大长度为50个字符。User:
VmUserInfo?
(可空类型)MapperConfigurationExpression cfg
,用于配置映射。MembleComment
到 Comment
的映射。Comment
实体,并将 MembleComment
的属性映射到 Comment
的相应属性。Commenter
属性被初始化为 MembleCommenter
对象,其中包含评论者的头像、身份(管理员或成员)和昵称。整体来看,MembleComment
类用于表示一个评论的视图模型,包含了评论的基本信息和评论者的信息。通过实现 IHaveCustomMapping
接口,类能够与 AutoMapper 配合使用,将视图模型转换为数据实体(Comment
)。这使得在处理评论时,可以方便地将用户输入的数据映射到后端的数据结构中。