RobotMapper 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
RobotMapper 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
RobotMapper 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
RobotMapper 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
RobotMapper 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache
开发语言 C#
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 1093439315
适用人群 未知
收录时间 2017-10-31

软件简介

  1. 在日常项目开发中,需要将数据访问层的Entity转化为数据传输层的DTO,或者将数据传输层的DTO转化为前端的ViewModel,而手写转换方法很烦,而且随着结构的增加,类的增加,代码量会比较大且不利于更新维护,因此需要一款能够自动映射工具帮我们实现这些工作。

  2. 我们对映射工具也有如下要求:

  • 转化效率必须高:显然,查询数据只需要0.001毫秒但是映射花费1秒这是我们不能接受的;

  • 配置必须简单甚至无需配置或者自动配置:每次映射都需要进行复杂的配置无异于手动映射让人烦躁;

  • 解决循环引用问题:尤其是数据访问层,由于数据库表之间的关系,我们的Entity会有很多一对一,一对多,多对多的导航属性,类型之间的互相引用必不可少,传统的映射工具无法自动解决该问题,要么进入死循环要么映射效率低下;

那么本映射工具“RobotMapper”就是为了解决以上问题而诞生的,是的,它叫RobotMapper,一切都是自动化完成!

该款工具有如下特色:

  1. 无需配置

    var user = TestHelper.创建扁平化User();
    var newuser = user.RobotMap<User, DTO.User>();
    Assert.AreEqual(user.Code, newuser.Code);
    Assert.AreEqual(user.Id, newuser.Id);
    Assert.AreEqual(user.Department, newuser.Department);
    Assert.AreEqual(user.Name, newuser.Name);


  2. 解决循环引用
    创建一个循环引用User

    public static User 创建循环引用User()
    {
        Entity.User user = new User()
        {
            Code = "Liuhai",
            Id = "hai.liu",
            Department = "部门1",
            Name = "海哥",
        };
        user.Roles.Add(new Role()
        {
            Name = "角色1",
            Users = new List<User>() { new User() { Name = "SB" } }
        });
    
        return user;
    }


仍然是自动映射

var user = TestHelper.创建循环引用User();
var newuser = user.RobotMap<User, DTO.User>();
Assert.AreEqual(user.Code, newuser.Code);
Assert.AreEqual(user.Id, newuser.Id);
Assert.AreEqual(user.Department, newuser.Department);
Assert.AreEqual(user.Name, newuser.Name);
Assert.IsTrue(newuser.Roles.Count == 1);
  • 支持自定义映射配置:

    [TestMethod]
    public void 测试配置Bind()
    {
        Mapper.Initialize(creator =>
        {
            creator.CreatMap<User, DTO.User>(config =>
            {
                config.Bind(x => x.User12.Name, y => y.UserName);
                config.Ignore(y => y.Roles);
            });
        });
    }


  • 支持忽略属性:

    [TestMethod]
    public void 测试忽略规则转换()
    {
        Mapper.Initialize(creator =>
        {
            creator.CreatMap<User, DTO.User>(config =>
            {
                config.Ignore(y => y.Code);
                config.Ignore("Department", "Name");
            });
        });
        var user = TestHelper.创建扁平化User();
        var newuser = user.RobotMap<User, DTO.User>();
        Assert.IsNull(newuser.Code);
        Assert.IsNull(newuser.Department);
        Assert.IsNull(newuser.Name);
    }
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (2)

加载中
方便
2019/08/14 23:46
回复
举报
1093439315软件作者
打分: 力荐
比AutoMapper更加智能,更加方便
2017/10/31 17:33
回复
举报
更多评论
暂无内容
暂无内容
暂无内容
2 评论
14 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部