繁体   English   中英

使用AutoMapper查找映射的属性

[英]Find out mapped property using AutoMapper

我想在将DTO恢复到与导致错误的DTO属性相对应的viewmodel中的属性时发生'map'错误, PersonDto.PreferedName导致DB错误,比如说Cannot be null ,并且此属性映射到viemodel PersonViewModel.Name ,我希望能够在视图的langiage中显示错误消息,例如“Name is required”。

有什么方法可以查询Mapper或其他一些AutoMapper对象来查找哪个viewmodel属性PreferedName映射到?

根据注释,您可以使用[Required]System.ComponentModel.DataAnnotations.RequiredAttribute )注释您的viewmodel,并检查控制器操作中的ModelState.IsValid

序列化ModelState.Values的内容并返回到WPF前端将允许您以任何适合的方式显示任何验证错误。

看起来您正在从ModelState中获取错误,但要回答原始问题,您可以使用以下内容

using AutoMapper;
using System;
using System.Linq;

namespace ConsoleApplicationAutoMapper
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderDto>()
                                                        .ForMember(dest => dest.DtoMyProperty, x => x.MapFrom(y => y.MyProperty)
                                                          ));

            Order order = new Order() { MyProperty = 12 };

            var typeMaps = config.CreateMapper()
                                 .ConfigurationProvider
                                 .GetAllTypeMaps()
                                 .Where(t => t.SourceType == typeof(Order) && t.DestinationType == typeof(OrderDto))
                                 .Single()
                                 .GetPropertyMaps();

            foreach (var map in typeMaps)
                Console.WriteLine(map.SourceMember.Name + "->" + map.DestinationProperty.Name);



            Console.ReadLine();
        }
    }

    public class Order
    {
        public int MyProperty { get; set; }
    }

    public class OrderDto
    {
        public int DtoMyProperty { get; set; }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM