C# 自动映射器不映射IEnumerable<;T>;到IEnumerable<;T>;在视图模型中
我定义了以下类别C# 自动映射器不映射IEnumerable<;T>;到IEnumerable<;T>;在视图模型中,c#,asp.net-mvc,automapper,C#,Asp.net Mvc,Automapper,我定义了以下类别 Data.Models.Lists.List Infrastructure.Models.Lists.List 两者都包含以下字段 public int Id { get; set; } public string Description { get; set; } 我还定义了这个视图模型 public class IndexViewModel { public IEnumerable<Infrastructure.Models.Lists.List&g
Data.Models.Lists.List
Infrastructure.Models.Lists.List
两者都包含以下字段
public int Id { get; set; }
public string Description { get; set; }
我还定义了这个视图模型
public class IndexViewModel
{
public IEnumerable<Infrastructure.Models.Lists.List> Lists { get; set; }
}
公共类索引模型
{
公共IEnumerable列表{get;set;}
}
在我的Automapper配置中,我只需执行以下操作:
cfg.CreateMap< Data.Models.Lists.List, Infrastructure.Models.Lists.List>()
cfg.CreateMap()
我认为这就足够了,但我也补充了这一点
cfg.CreateMap<IEnumerable<List>,Models.Lists.IndexViewModel>();
cfg.CreateMap();
但是,当我尝试映射控制器中的项目时
var items = ListsService.GetLists(CurrentPrincipal.Id);
var model = Mapper.Map<IndexViewModel>(items);
var items=ListsService.GetLists(CurrentPrincipal.Id);
var model=Mapper.Map(项目);
列表始终为空,尽管项有22个。要使此映射正常工作,还需要添加哪些内容?您将项目直接映射到viewmodel的实例,而不是它的
列表属性。第一个映射配置很好,第二个不需要
var model = new IndexViewModel()
{
Lists = Mapper.Map<IEnumerable<Infrastructure.Models.Lists.List>>(items)
};
var模型=新的IndexViewModel()
{
Lists=Mapper.Map(项目)
};
AutoMapper自动映射同名的两种类型的属性
为了将整个源对象映射到目标对象属性(如本例所示),必须明确指定:
cfg.CreateMap<IEnumerable<Data.Models.Lists.List>, Models.Lists.IndexViewModel>()
.ForMember(dest => dest.Lists, m => m.MapFrom(src => src));
cfg.CreateMap()
.ForMember(dest=>dest.list,m=>m.MapFrom(src=>src));
我明白了,当你指出这一点时,它是有意义的!我真的很想把所有的映射逻辑都放在一个地方,看起来上面的代码应该放在控制器中。我假设有一种方法可以从映射中实现这一点。明天早上我会再看一眼。谢谢,我想这就是我要找的。直到早上才可以测试,但看起来票子打得很好。谢谢