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[]。
您不能像在 中那样向通用参数提供变量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)