使用AutoMapper查找映射的属性

时间:2017-01-11 11:06:48

标签: c# wpf mvvm exception-handling automapper

我正在寻找地图'将DTO恢复到与导致错误的DTO属性相对应的viewmodel中的属性时出现错误PersonDto.PreferedName会导致数据库错误,比如Cannot be null,此属性将映射到viemodel PersonViewModel.Name ,我希望能够在视图的langiage中显示错误消息,例如"名称是必需的"。

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

2 个答案:

答案 0 :(得分:1)

根据评论,您可以使用[Required]System.ComponentModel.DataAnnotations.RequiredAttribute)注释您的视图模型,并检查您的控制器操作ModelState.IsValid

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

答案 1 :(得分:0)

看起来您从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; }
    }
}