Asp.net mvc 将模型映射到dto和';包括';只有子元素的键
我有以下项目模型:Asp.net mvc 将模型映射到dto和';包括';只有子元素的键,asp.net-mvc,entity-framework,automapper,Asp.net Mvc,Entity Framework,Automapper,我有以下项目模型: public class Project { [Key] public int ProjectID { get; set; } public string Name { get; set; } public string Description { get; set; } public virtual ICollection<Screenshot> Sc
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; }
}
如您所见,每个项目都附带了一些屏幕截图。在下面的函数中,我想检索一些项目,并且只检索相应屏幕截图的ID
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;
}
public SearchResultDTO GetProjects(searchParameters projectdto dto)
{
...
var resultDTO=new SearchResultDTO
{
Entities=Mapper.Map(projects.ToList()),
TotalItems=projects.Count()
};
返回resultDTO;
}
以下是项目编号:
[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 IEnumerable<int> ScreenshotID { get; set; }
[DataContract]
公共类ProjectDTO:BaseDTO
{
[数据成员]
公共int ProjectID{get;set;}
[数据成员]
公共字符串名称{get;set;}
[数据成员]
公共字符串说明{get;set;}
[数据成员]
公共IEnumerable屏幕快照ID{get;set;}
所以我不知道如何在我的DTO中映射ScreenshotID
非常感谢您的帮助
谢谢。在
屏幕截图
和int
之间创建映射:
Mapper
.CreateMap<Screenshot, int>()
.ConvertUsing(s => s.ScreenshotID);
当您要映射时:
var project = new Project
{
Screenshots = new[]
{
new Screenshot { ScreenshotID = 1 },
new Screenshot { ScreenshotID = 2 },
new Screenshot { ScreenshotID = 3 },
}
};
var projectDto = Mapper.Map<Project, ProjectDTO>(project);
// at this stage the projectDto.ScreenshotID collection will contain
// the necessary information
var项目=新项目
{
屏幕截图=新[]
{
新屏幕截图{ScreenshotID=1},
新屏幕截图{ScreenshotID=2},
新屏幕截图{ScreenshotID=3},
}
};
var projectDto=Mapper.Map(项目);
//在此阶段,projectDto.ScreenshotID集合将包含
//必要的信息
它可以编译,但在运行时,我遇到了一个错误“成员的自定义配置仅支持类型上的顶级单个成员。”在屏幕截图和int之间的CreateMap上。有什么想法吗?无论如何谢谢。谢谢,它工作得很好。现在我在这里搜索一个稍微不同的实现:如果你有时间,你能看看吗?无论如何谢谢。
Mapper
.CreateMap<Project, ProjectDTO>()
.ForMember(
dest => dest.ScreenshotID,
opt => opt.MapFrom(src => src.Screenshots)
);
var project = new Project
{
Screenshots = new[]
{
new Screenshot { ScreenshotID = 1 },
new Screenshot { ScreenshotID = 2 },
new Screenshot { ScreenshotID = 3 },
}
};
var projectDto = Mapper.Map<Project, ProjectDTO>(project);
// at this stage the projectDto.ScreenshotID collection will contain
// the necessary information