AutoMapper运用实例

来源:互联网 发布:交易猫软件下载 编辑:程序博客网 时间:2024/05/19 14:17

AutoMapper是可以实现Deep copy的。默认是相同的属性名复制过去。
如果有不一样的属性名需要拷贝,可以通过定义自己的规则就行Mapping。

使用实例(转载):

public class Employee{    public string Name { get; set; }    public string Email { get; set; }    public Address Address { get; set; }    public string Position { get; set; }    public bool Gender { get; set; }    public int Age { get; set; }                public int YearsInCompany { get; set; }    public DateTime StartDate { get; set; }}public class Address{    public string Country { get; set; }    public string City { get; set; }    public string Street { get; set; }    public int Number { get; set; }            }public class EmployeeViewItem{    public string Name { get; set; }    public string Email { get; set; }    public string Address { get; set; }    public string Position { get; set; }    public string Gender { get; set; }    public int Age { get; set; }                public int YearsInCompany { get; set; }    public string StartDate { get; set; }}

普通做法:

EmployeeViewItem viewItem = new EmployeeViewItem();viewItem.Name = employee.Name;viewItem.Email = employee.Email;viewItem.Address = employee.Address.City + employee.Address.Street + employee.Address.Number;viewItem.Position = employee.Position;viewItem.Gender = employee.Gender == true ? "Man" : "Female";viewItem.Age = employee.Age;viewItem.YearsInCompany = employee.YearsInCompany;viewItem.StartDate = employee.StartDate.ToShortDateString();

用AutoMapper之后:

Mapper.CreateMap<Employee, EmployeeViewItem>();EmployeeViewItem employeeViewItem = Mapper.Map<Employee, Employee>(employee);

以上只需两句话非常简洁,但是需要配置Mapping的方法

class Program{    static void Main(string[] args)    {        Mapper.CreateMap<Employee, EmployeeViewItem>()           .ForMember(ev => ev.Address,                        m => m.MapFrom(a => a.Address.City + ", " +                                            a.Address.Street + " " +                                            a.Address.Number)                      )           .ForMember(ev => ev.Gender,                        m => m.ResolveUsing<GenderResolver>().FromMember(e => e.Gender))           .ForMember(ev => ev.StartDate, m => m.AddFormatter<DateFormatter>());        Employee employee = new Employee        {            Name = "John SMith",            Email = "john@codearsenal.net",            Address = new Address            {                Country = "USA",                City = "New York",                Street = "Wall Street",                Number = 7            },            Position = "Manager",            Gender = true,            Age = 35,                            YearsInCompany = 5,            StartDate = new DateTime(2007, 11, 2)        };        EmployeeViewItem employeeVIewItem = Mapper.Map<Employee, EmployeeViewItem>(employee);                }            public class GenderResolver : ValueResolver<bool, string>    {        protected override string ResolveCore(bool source)        {            return source ? "Man" : "Female";        }    }    public class DateFormatter : IValueFormatter    {        public string FormatValue(ResolutionContext context)        {            return ((DateTime)context.SourceValue).ToShortDateString();        }    }}

EmployViewItem的结果如下:
这里写图片描述

还有些更加深入和详细的用法可以参照下面的链接
http://www.cnblogs.com/youring2/p/automapper.html

0 0
原创粉丝点击