zoukankan      html  css  js  c++  java
  • C#使用AutoMapper

    using System;
    using AutoMapper;
    
    namespace AutoMapperDemo02
    {
        /// <summary>
        ///     https://blog.csdn.net/u014180504/article/details/88722555
        ///     AutoMapper用法
        ///     Nuget: AutoMapper 8.0.0, AutoMapper.Data 2.0.0
        ///     版本是8.0.0 由于8.0要求 .net framework 4.6+ ,而现有项目都是4.5 所以这里直接安装的7.0.1 , AutoMapper.Data选择的是2.0.0
        ///     这个后面是用来实现IDataReader转List的
        ///     问题:System.InvalidOperationException:“Mapper already initialized. You must call Initialize once per application
        ///     domain/process.”
        ///     原因:Mapper.Initialize 只能执行一次,你的代码中多次执行了 Mapper.Initialize
        /// </summary>
        internal class Program
        {
            private static void Main()
            {
                Console.Title = "AutoMapper用法";
    
                // 注册映射关系
                MapperInitialize();
    
                Console.WriteLine("基础模型转换");
                Usage01(); // 基础模型转换
                Console.WriteLine("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
    
                Console.WriteLine("反向映射转换");
                Usage02(); // 反向映射转换
                Console.WriteLine("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
    
                Console.WriteLine("自定义映射规则");
                Usage03(); // 自定义映射规则
                Console.WriteLine("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
    
                Console.ReadKey();
            }
    
            /// <summary>
            ///     注册映射关系(只能运行一次)
            /// </summary>
            private static void MapperInitialize()
            {
                Mapper.Initialize(cfg =>
                {
                    // 注册映射关系【基础模型转换】
                    cfg.CreateMap<Student, StudentDto>();
    
                    // 注册映射关系【反向映射转换】
                    cfg.CreateMap<Order, OrderDto>().ReverseMap();
    
                    // 注册映射关系【自定义映射规则】
                    cfg.CreateMap<string, int>().ConvertUsing(s => Convert.ToInt32(s));
                    cfg.CreateMap<string, DateTime>().ConvertUsing(new DateTimeTypeConverter());
                    cfg.CreateMap<Source, Destination>();
                });
            }
    
            /// <summary>
            ///     自定义映射规则
            /// </summary>
            private static void Usage03()
            {
                Mapper.AssertConfigurationIsValid();
    
                var source = new Source
                {
                    Value1 = "5",
                    Value2 = "01/01/2000",
                    Value3 = "1.222"
                };
    
                var result = Mapper.Map<Source, Destination>(source);
                Console.WriteLine("Value1:" + result.Value1);
                Console.WriteLine("Value2:" + result.Value2);
                Console.WriteLine("Value3:" + result.Value3);
            }
    
    
            /// <summary>
            ///     反向映射转换
            /// </summary>
            private static void Usage02()
            {
                var customer = new Customer {Name = "Bob"};
    
                var order = new Order {Customer = customer, Total = 15.8m};
    
                var orderDto = Mapper.Map<Order, OrderDto>(order);
                orderDto.CustomerName = "Joe";
    
                var o = Mapper.Map(orderDto, order);
                Console.WriteLine("Customer.Name:" + o.Customer.Name);
                Console.WriteLine("Total:" + o.Total);
            }
    
            /// <summary>
            ///     基础模型转换
            /// </summary>
            private static void Usage01()
            {
                var student = new Student {Id = 1, Name = "LDH", Address = "Shanghai"};
                var studentDto = Mapper.Map<StudentDto>(student);
    
                Console.WriteLine("StudentDto对象属性值如下:");
    
                Console.WriteLine("Id:" + studentDto.Id);
                Console.WriteLine("Name:" + studentDto.Name);
                Console.WriteLine("Address:" + studentDto.Address);
            }
        }
    
        #region 反向映射转换 实体类
    
        public class Order
        {
            public decimal Total { get; set; }
            public Customer Customer { get; set; }
        }
    
        public class Customer
        {
            public string Name { get; set; }
        }
    
        public class OrderDto
        {
            public decimal Total { get; set; }
            public string CustomerName { get; set; }
        }
    
        #endregion
    
        #region 基础模型转换 实体类
    
        public class Student
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Address { get; set; }
        }
    
        public class StudentDto
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Address { get; set; }
        }
    
        #endregion
    
        #region 自定义映射规则 实体
    
        public class Source
        {
            public string Value1 { get; set; }
            public string Value2 { get; set; }
            public string Value3 { get; set; }
        }
    
        public class Destination
        {
            public int Value1 { get; set; }
            public DateTime Value2 { get; set; }
            public double Value3 { get; set; }
        }
    
        public class DateTimeTypeConverter : ITypeConverter<string, DateTime>
        {
            public DateTime Convert(string source, DateTime destination, ResolutionContext context)
            {
                return System.Convert.ToDateTime(source);
            }
        }
    
        #endregion
    }

    踏实做一个为人民服务的搬运工!
  • 相关阅读:
    Springboot学习:核心配置文件
    Springboot学习:底层依赖与自动配置的原理
    Springboot学习:介绍与HelloWorld
    js根据时间戳倒计时
    windows phone 豆瓣api的封装
    Android开发初始
    PHP(一)
    程序员修炼之道(一)
    WebClient和HttpReuqest两种网络请求的方式
    黑客与画家(二)
  • 原文地址:https://www.cnblogs.com/LifeDecidesHappiness/p/15222942.html
Copyright © 2011-2022 走看看