我收到了一个很好的实现表单,用于映射嵌套子项的键(ID)(请参阅此处:Mapping a model into a dto and 'include' only the key of child element)但是在这里我搜索的解决方案略有不同,如下所述。
我有以下项目模型:
public class Project
{
[Key]
public int ProjectID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<Screenshot> Screenshots { get; set; }
}
我有以下截图模型:
public class Screenshot
{
[Key]
public int ScreenshotID { get; set; }
public string ScreenshotName { get; set; }
public byte[] ScreenshotContent { get; set; }
public string ScreenshotContentType { get; set; }
}
如您所见,每个项目都附有一些截图。在下面的函数中,我想检索一些项目,并且只对相应屏幕截图的一对ScreenshotID + ScreenshotName。
public SearchResultDTO<ProjectDTO> GetProjects(SearchParametersProjectDTO dto)
{
...
var resultDTO = new SearchResultDTO<ProjectDTO>
{
Entities = Mapper.Map<IEnumerable<Project>, IEnumerable<ProjectDTO>>(projects.ToList()),
TotalItems = projects.Count()
};
return resultDTO;
}
这是ProjectDTO:
[DataContract]
public class ProjectDTO : BaseDTO<ProjectDTO, Project>
{
[DataMember]
public int ProjectID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public Dictionary<int, string> Screenshots { get; set; }
所以我不知道如何将“ScreenshotID + ScreenshotName”映射到我的DTO的Screenshots属性中。
非常感谢任何帮助。
感谢。
答案 0 :(得分:0)
您可以定义Screenshot
和KeyValuePair<int, string>
之间的映射以及Project
和ProjectDTO
之间的映射:
Mapper
.CreateMap<Screenshot, KeyValuePair<int, string>>()
.ConvertUsing(s => new KeyValuePair<int, string>(s.ScreenshotID, s.ScreenshotName));
Mapper
.CreateMap<Project, ProjectDTO>();
然后:
var project = new Project
{
Screenshots = new[]
{
new Screenshot { ScreenshotID = 1, ScreenshotName = "name " + 1 },
new Screenshot { ScreenshotID = 2, ScreenshotName = "name " + 2 },
new Screenshot { ScreenshotID = 3, ScreenshotName = "name " + 3 },
}
};
var projectDto = Mapper.Map<Project, ProjectDTO>(project);
// at this stage the projectDto.Screenshots dictionary will contain
// the necessary information