Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动映射器不映射IEnumerable<;T>;到IEnumerable<;T>;在视图模型中_C#_Asp.net Mvc_Automapper - Fatal编程技术网

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));

我明白了,当你指出这一点时,它是有意义的!我真的很想把所有的映射逻辑都放在一个地方,看起来上面的代码应该放在控制器中。我假设有一种方法可以从映射中实现这一点。明天早上我会再看一眼。谢谢,我想这就是我要找的。直到早上才可以测试,但看起来票子打得很好。谢谢