我正在尝试使用 AutoMapper 自动映射我的模型以查看模型。
我有以下两个视图模型
public class CreateComment
{
[Required]
public int BlogId { get; set; }
[Required]
public string Message { get; set; }
public CreateComment()
{
}
public CreateComment(int? blogId)
{
if(blogId.HasValue)
{
BlogId = blogId.Value;
}
}
}
public class BlogViewModel
{
[Required]
public string Title { get; set; }
[Required]
public string Body { get; set; }
// There are more
[Required]
public int? Id { get; set; }
[DataType("CommentDisplayViewModelTable")]
public IEnumerable<CommentDisplayViewModel> Comments { get; set; }
public CreateComment CreateCommentForm { get; set; }
}
每次映射此对象时,
CreateCommentForm
属性都应该是一个新实例。唯一不同的是,在创建 CreateCommentForm
的新实例时,我希望为我填充 BlogId
。这里的想法是用一个空的 CreateCommentForm
来构建 html 表单。
目前,当我配置映射器时,我忽略
CreateCommentForm
属性只是为了避免遇到 AutoMapper 异常。但是我如何通过将 Id 属性传递给对象来告诉自动映射器每次创建一个新实例?
mapper.CreateMap<Blog, BlogViewModel>().ForMember(dest => dest.CreateCommentForm , opts => opts.Ignore() );
如何通过使用 AutoMapper 传递
CreateCommentForm
属性来正确地将 Blog.Id
映射到新实例?
对于自定义对象创建,您可以使用
ResolveUsing
。
mapper.CreateMap<Blog, BlogViewModel>().ForMember(dest => dest.CreateCommentForm , opts => opts.ResolveUsing(src => new CreateComment(src.Id)) );
ResolveUsing
现已弃用,Google 将我带到这里进行更新。
mapper.CreateMap<Blog, BlogViewModel>().ForMember(dest => dest.CreateCommentForm , opts => opts.MapFrom(src => new CreateComment(src.Id)) );
你现在应该使用
MapFrom
,就像上面的例子
文档链接; https://docs.automapper.org/en/stable/8.0-Upgrade-Guide.html