zoukankan      html  css  js  c++  java
  • AutoMapper扩展

    扩展类:AutoMapExtention

    using System;
    using System.Collections.Generic;
    using System.Linq.Expressions;
    
    namespace AutoMapper.Extention
    {
        public static class AutoMapExtention
        {
            /// <summary>
            /// 类型映射
            /// </summary>
            /// <typeparam name="F">From</typeparam>
            /// <typeparam name="T">To</typeparam>
            /// <param name="source"></param>
            /// <returns></returns>
            public static T MapTo<F, T>(this F source,
                 Func<Dictionary<Expression<Func<T, object>>, Action<IMemberConfigurationExpression<F>>>> mapRuleSets = null,
                 bool ignoreNull = false)
                where T : class
                where F : class
            {
                if (source == null) { return default(T); }
                var m = Mapper.CreateMap<F, T>();
                if (ignoreNull)
                {
                    m.ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));
                }
                if (mapRuleSets != null)
                {
                    var arr = mapRuleSets();
                    foreach (var item in arr)
                    {
                        m.ForMember(item.Key, item.Value);
                    }
                }
                return Mapper.Map<T>(source);
            }
    
            /// <summary>
            /// 集合映射
            /// </summary>
            /// <typeparam name="F"></typeparam>
            /// <typeparam name="T"></typeparam>
            /// <param name="source"></param>
            /// <param name="defaultValueSets">默认值</param>
            /// <param name="mapRuleSets">映射规则</param>
            /// <returns></returns>
            public static List<T> MapTo<F, T>(this IEnumerable<F> source,
                Func<Dictionary<Expression<Func<T, object>>, Action<IMemberConfigurationExpression<F>>>> mapRuleSets = null,
                bool ignoreNull = false)
                where T : class
                where F : class
            {
                if (source == null) { return new List<T> { }; }
                var m = Mapper.CreateMap<F, T>();
                if (ignoreNull)
                {
                    m.ForAllMembers(opt => opt.Condition(srs => !srs.IsSourceValueNull));
                }
                if (mapRuleSets != null)
                {
                    var arr = mapRuleSets();
                    foreach (var item in arr)
                    {
                        m.ForMember(item.Key, item.Value);
                    }
                }
                return Mapper.Map<List<T>>(source);
            }
        }
    }
    View Code

    实体模型:

    using System;
    
    namespace UnitTests.Model.OOMapper
    {
        public class User
        {
            public Guid ID { get; set; }
            public int? SerialNumber { get; set; }
            public string RealName { get; set; }
            public bool Sex { get; set; }
        }
    }
    View Code
    using System;
    
    namespace UnitTests.Model.OOMapper
    {
        public partial class UserDTO
        {
            public Guid ID { get; set; }
            public int? SerialNumber { get; set; }
            public string RealName { get; set; }
            public bool Sex { get; set; }
        }
    }
    View Code

     测试

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using AutoMapper.Extention;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using UnitTests.Model.OOMapper;
    using System.Linq.Expressions;
    using AutoMapper;
    
    namespace UnitTests.Tests
    {
        [TestClass()]
        public class OOMapperTests
        {
            [TestMethod()]
            public void MapToTest()
            {
                var user = new User()
                {
                    ID = Guid.NewGuid(),
                    Sex = true,
                    RealName = "陈楚生",
                    SerialNumber = 1
                };
                //单体映射
                var userDTO = user.MapTo<User, UserDTO>(() =>
                {
                    var rules = new Dictionary<Expression<Func<UserDTO, object>>, Action<IMemberConfigurationExpression<User>>>();
                    rules.Add(dst => dst.RealName, opt => opt.MapFrom(src => string.Format("Hello,{0}", src.RealName)));
                    return rules;
                });
                //集合映射
                List<User> users = new List<User>() { user };
                var userDTOs = users.MapTo<User, UserDTO>(() =>
                {
                    var rules = new Dictionary<Expression<Func<UserDTO, object>>, Action<IMemberConfigurationExpression<User>>>();
                    rules.Add(dst => dst.RealName, opt => opt.MapFrom(src => string.Format("Hello,{0}", src.RealName)));
                    return rules;
                });
                Assert.IsTrue(user.ID == userDTO.ID && users.Count == userDTOs.Count);
            }
        }
    }
    View Code
  • 相关阅读:
    Linux Linux程序练习一
    Linux make语法
    python类的继承的两种方式
    Django中更新多个对象数据与删除对象的方法
    admin.ModelAdmin 后台管理关联对象,某个字段怎么显示值
    jQuery插件
    python Django Nginx+ uWSGI 安装配置
    Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
    爬虫
    ftplib模块
  • 原文地址:https://www.cnblogs.com/Jabben_Yi/p/5700986.html
Copyright © 2011-2022 走看看