我希望了解Automapper的工作原理。在我使用所谓的ViewModels
来发送业务需要从一个或多个数据库表中提取的信息之前,我知道了基本的想法。现在我正在开发一个遗留项目,其中使用了Automapper
,也许它提供的不仅仅是那个,但是在给定的时刻我想要找不到(能够)将我的Domain对象映射到我的DTO对象(s)或反之亦然,我不确定哪一种是正确的方法,因为我无法做到。
这是我用来测试Automapper
的一些基本功能的控制台项目的一个简单示例:
DTO_User.cs
类用于将数据发送到前端的位置。它看起来像这样:
public class DTO_User
{
public int ID { get; set; }
public string Name { get; set; }
}
User.cs
是代表实际域数据的类:
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }
}
所以我想做什么。在我的Program.cs
中,我有一个静态方法可以创建一些User
个主题:
public static List<Model.User> SeedUsers()
{
List<Model.User> users = new List<Model.User>()
{
new Model.User { ID = 1, Name = "Ivan", PhoneNumber = "1235436"},
new Model.User { ID = 2, Name = "Petkan", PhoneNumber = "00000000"},
new Model.User { ID = 3, Name = "Dragan", PhoneNumber = "11111111"},
new Model.User { ID = 4, Name = "Stoyan", PhoneNumber = "224545346"}
};
return users;
}
然后在我的Main
方法中,我尝试将此模拟数据映射到我的DTO列表:
static void Main(string[] args)
{
Mapper.CreateMap<DTO.DTO_User, Model.User>();
//Mock user data as if it's taken from database
List<Model.User> users = new List<Model.User>();
users.AddRange(SeedUsers());//Simulate call to database
//Create List of DTO Users
List<DTO.DTO_User> dtoUsers = new List<DTO.DTO_User>();
//Now map the database users to our DTO Users
foreach (var user in users)
{
DTO.DTO_User u = Mapper.Map<Model.User, DTO.DTO_User>(user);
dtoUsers.Add(u);
}
}
我在foreah循环中得到了错误:
DTO.DTO_User u = Mapper.Map<Model.User, DTO.DTO_User>(user);
说我有一些无效的论点。显然,我并没有真正理解Automapper是如何实现实际映射的。上面的代码对我来说是最自然的。我知道这是非常基本的,所以实际的解决方案不会太具挑战性,但如果有人向我解释我的逻辑在哪里破解以及工作代码背后的想法,我真的很感激。
答案 0 :(得分:1)
尝试添加其他映射:
Mapper.CreateMap<Model.User, DTO.DTO_User>();
并将Map调用更改为以下内容:
DTO.DTO_User u = Mapper.Map<DTO.DTO_User>(user);