我们的实体模型具有导航属性:
public class Course
{
public Guid Id { get; set; }
...
public Guid InstructorId { get; set; }
public virtual Instructor Instructor { get; set; }
public virtual ICollection<Instructor> Coinstructors { get; set; }
}
也就是说,一门课程有一个教练和多个硬币结构。
我的视图模型具有这些教师的身份。
public class CourseCreateModel
{
...
public InstructorModel Instructor { get; set; }
public IEnumerable<InstructorModel> Coinstructors { get; set; }
}
InstructorModel
包含Id
:
public class InstructorModel
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
要将数据从我们的DTO CourseCreateModel
传输到域模型Course
,我们可以轻松映射教师,因为域模型中有InstructorId
:
Mapper.CreateMap<CourseCreateModel, Course>()
.ForMember(dest => dest.InstructorId, opts => opts.MapFrom(src => src.Instructor.Id))
...;
但是如何映射Coinstructors
?我们可以获得一系列moneytructor的id。但是如何进行映射?
答案 0 :(得分:0)
我相信你有两个选择:
选项nr。 1:
.ForMember(c=>c.Coinstructors,op=>op.MapFrom(v=>v.Coinstructorids.Select(c=>new Instructor(){Id=c})))
其中Coinstructorids = List<int>();
选项nr。 2:强>
创建自定义解析器:
public class CustomConvert : ValueResolver<IList<int>, IList<Instructor>>
{
protected override string ResolveCore(IList<int> source)
{
string result = new List<Instructor>();
foreach (var item in source)
{
result.Add(new Instructor() {Id = item});
}
return result;
}
}
并使用它:
.ForMember(c => c.Coinstructors, op => op.ResolveUsing<CustomConvert>().FromMember(c => c.Coinstructorids));
其中Coinstructorids = List<int>();