AutoMapper.dll 中发生了 'AutoMapper.AutoMapperMappingException' 类型的未处理异常

An unhandled exception of type 'AutoMapper.AutoMapperMappingException' occurred in AutoMapper.dll

我想对 Automapper 的工作原理有一些了解。我知道基本思想,之前我只是使用所谓的 ViewModels 来发送业务需要从一个或多个数据库表中提取的信息。现在我正在处理一个使用 Automapper 的遗留项目,也许它提供的不仅仅是这些,但在给定的时刻,我想理解(能够)将我的域对象映射到我的 DTO 对象(s) 或者反之亦然,我不确定哪一个是正确的方法,因为我做不到。

这是我为测试 Automapper:

的一些基本功能而制作的控制台项目的一个简单示例

其中DTO_User.cs class 是用来向前端发送数据的。它看起来像这样:

public class DTO_User
{
    public int ID { get; set; }
    public string Name { get; set; }
}

User.cs是代表实际域数据的class:

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 是如何实现实际映射的。上面的代码对我来说是最自然的。我知道这是非常基本的,所以实际的解决方案不会太具有挑战性,但如果有人向我解释我的逻辑在哪里出现问题以及工作代码背后的想法是什么,我将不胜感激。

正在尝试添加额外的映射:

Mapper.CreateMap<Model.User, DTO.DTO_User>();

并将您的 Map 调用更改为以下内容:

DTO.DTO_User u = Mapper.Map<DTO.DTO_User>(user);