首页 > 解决方案 > Automapper - 为什么不使用 SourceMember 属性进行映射

问题描述

为什么 Automapper 不使用 SourceMember 属性映射到 Employee?如果我将名称与名称匹配,则它可以工作:

不起作用:
https ://dotnetfiddle.net/yM9eiQ

是否有效:
https ://dotnetfiddle.net/GhpF9X

using AutoMapper;
using AutoMapper.Configuration.Annotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AutoMapperConsole1
{
    [AutoMap(typeof(Person))]
    class Employee
    {
        [SourceMember("FirstName")]
        public string GivenName { get; set; }
        [SourceMember("LastName")]
        public string SurName { get; set; }
        public decimal Salary { get; set; }
    }

    class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            //http://automapper.readthedocs.io/en/latest/Getting-started.html
            Person p = new Person();
            p.FirstName = "John";
            p.LastName = "Smith";

            //Create a map
            //Mapper.Initialize(cfg => cfg.CreateMap<Person, Employee>());
            //or
            var config = new MapperConfiguration(cfg => cfg.CreateMap<Person, Employee>());

            //var mapper = config.CreateMapper();
            //or
            var mapper = new Mapper(config);
            
            var dto = mapper.Map<Employee>(p);
            //or
            //Employee dto2 = Mapper.Map<Employee>(p);
            Console.Write(dto.GivenName);
        }
    }
}

标签: c#automapper

解决方案


属性映射依赖于AddMaps. 对于给定的映射,属性映射CreateMap是互斥的。但是您可以在相同的配置中拥有流利的地图和属性地图。


推荐阅读