RobotMapper- 自动映射的 Mapper 工具
C# 其他开发相关
共0Star
详细介绍
-
在日常项目开发中,需要将数据访问层的Entity转化为数据传输层的DTO,或者将数据传输层的DTO转化为前端的ViewModel,而手写转换方法很烦,而且随着结构的增加,类的增加,代码量会比较大且不利于更新维护,因此需要一款能够自动映射工具帮我们实现这些工作。
-
我们对映射工具也有如下要求:
-
转化效率必须高 :显然,查询数据只需要0.001毫秒但是映射花费1秒这是我们不能接受的;
-
配置必须简单甚至无需配置或者自动配置 :每次映射都需要进行复杂的配置无异于手动映射让人烦躁;
-
解决循环引用问题 :尤其是数据访问层,由于数据库表之间的关系,我们的Entity会有很多一对一,一对多,多对多的导航属性,类型之间的互相引用必不可少,传统的映射工具无法 自动解决该问题 ,要么进入死循环要么映射效率低下;
那么本映射工具“RobotMapper”就是为了解决以上问题而诞生的,是的,它叫RobotMapper,一切都是自动化完成!
该款工具有如下特色:
-
无需配置 :
var user = TestHelper.创建扁平化User();
var newuser = user.RobotMap
();
Assert.AreEqual(user.Code, newuser.Code);
Assert.AreEqual(user.Id, newuser.Id);
Assert.AreEqual(user.Department, newuser.Department);
Assert.AreEqual(user.Name, newuser.Name); -
解决循环引用
创建一个循环引用Userpublic 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() { 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(config =>
{
config.Bind(x => x.User12.Name, y => y.UserName);
config.Ignore(y => y.Roles);
});
});
} -
支持忽略属性:
[TestMethod]
public void 测试忽略规则转换()
{
Mapper.Initialize(creator =>
{
creator.CreatMap(config =>
{
config.Ignore(y => y.Code);
config.Ignore(“Department”, “Name”);
});
});
var user = TestHelper.创建扁平化User();
var newuser = user.RobotMap();
Assert.IsNull(newuser.Code);
Assert.IsNull(newuser.Department);
Assert.IsNull(newuser.Name);
}