AutoMapper 无法使用 ASP.NET Core 将 List<Model>(1 项)转换为 List<DTO>(0 项)

Roe*_*las 3 c# asp.net asp.net-mvc

下面的代码是我用来填充 Index.cshtml 中的表格的。属性列表有 1 行,地图模型后有 0 行。我错过了什么吗?我预计属性模型也会有 1 行。

// GET://
    [HttpGet]
    public IActionResult Index()
    {
        //get
        List<Company.Model> list = repo.ReadAll();
        //to map
        List<Company.DTO> model;

        //config for mapping
        var config = new MapperConfiguration(cfg => cfg.CreateMap<List<Company.Model>, List<Company.DTO>>());
        //create mappper
        var mapper = config.CreateMapper();
        //the map
        model = mapper.Map<List<Company.DTO>>(list);

        //return
        return View(model);
    }
Run Code Online (Sandbox Code Playgroud)

当我做错事时请告诉我!我的第一篇 Automap 和 Stack Overflow 上的第一篇文章。谢谢!!

小智 5

将一个模型映射到另一个模型。Automapper 足够智能来映射集合:

var config = new MapperConfiguration(cfg => cfg.CreateMap<Company.Model, Company.DTO>());
Run Code Online (Sandbox Code Playgroud)

现在,您还没有告诉它如何将 a 映射Model到 a DTO!它只知道如何将 a 映射List<Model>到 a List<DTO>,这很棒,但它不知道如何映射集合中的每个单独元素

现在它知道如何将模型映射到 dto,它还知道如何将一个集合映射到另一个集合:

model = mapper.Map<List<Company.DTO>>(list);
Run Code Online (Sandbox Code Playgroud)

每个集合类型是什么并不重要,只要它们都是集合即可。输入可以是一个数组,您可以将其映射到 a List<DTO>,没问题。正如我所说,Automapper 在集合方面非常智能。它只需要知道如何映射你的东西。

这意味着您不需要将事物集合映射到小部件集合。只需将内容映射到小部件,然后让 Automapper 完成其余的工作。这是一个努力的人:)