使用 AutoMapper 映射类数组

Ash*_*rma 1 c# asp.net asp.net-mvc automapper

我是 AutoMapper 的新手,正在尝试映射Arrayclass ItemLink[]

public class ViewModel
{
  public ItemLink[] ItemLinks { get; set; }
}

public class ItemLink
{
  public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我试过:

Mapper.Map<viewModel.ItemLink>(db.ItemLinks);
Run Code Online (Sandbox Code Playgroud)

错误:

“映射器未初始化。使用适当的配置调用初始化。如果您尝试通过容器或其他方式使用映射器实例,请确保没有对静态 Mapper.Map 方法进行任何调用,并且如果您使用的是 ProjectTo 或 UseAsDataSource扩展方法,请确保传入适当的 IConfigurationProvider 实例。”

简单的映射不行吗?

编辑1

为了澄清更多,我从数据库中获得了类似的类结构。例子,

public class Db
{
  public ItemLink[] ItemLinks { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以,我想用 来ViewModel.ItemLink[]映射Db.ItemLink[]

And*_*nov 5

您不能像在 中那样向通用参数提供变量Mapper.Map<viewModel.ItemLink>(db.ItemLinks);。它称为类型参数并且必须是类型。

正如@gisek 在他的回答中提到的,您需要首先配置映射器。通常它是在应用程序启动时完成的。

您可以考虑从数据库获取完整对象,但您也可以选择使用可查询扩展,这些扩展仅用于获取视图模型所需的数据。

配置。我假设您有DB数据库中实体的命名空间和View视图模型的命名空间。

Mapper.Initialize(cfg => {
    cfg.CreateMap<DB.ItemLink, View.ItemLink>();
});
Mapper.Configuration.AssertConfigurationIsValid();
Run Code Online (Sandbox Code Playgroud)

从数据库中获取完整实体,然后将其映射到属性:

var viewModel = new View.Item();
viewModel.ItemLinks = Mapper.Map<View.ItemLink[]>(db.ItemLinks.ToArray());
Run Code Online (Sandbox Code Playgroud)

从数据库到视图模型的项目实体:

var viewModel = new View.Item();
viewModel.ItemLinks = db.ItemLinks.ProjectTo<View.ItemLink>().ToArray();
Run Code Online (Sandbox Code Playgroud)