我想了解 Automapper 的工作原理。我知道基本思想,在我只是使用所谓ViewModels
的发送业务需要的信息之前,从一个或多个数据库表中提取。现在我正在处理一个Automapper
使用的遗留项目,也许它提供的不仅仅是这些,但在给定的时刻,我想理解(能够)将我的域对象映射到我的 DTO 对象,反之亦然-versa,我不确定哪一个是正确的方法,因为我做不到。
这是我为测试以下一些基本功能而制作的控制台项目的一个简单示例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);
}
}
我在这里的前循环中得到了错误:
DTO.DTO_User u = Mapper.Map<Model.User, DTO.DTO_User>(user);
说我有一些无效的论点。显然,我并没有真正理解 Automapper 是如何实现实际映射的。上面的代码对我来说是最自然的。我知道这是非常基本的,因此实际的解决方案不会太具有挑战性,但如果有人向我解释我的逻辑在哪里出现问题以及工作代码背后的想法是什么,我将不胜感激。