EF Core с AutoMapper - PullRequest
       156

EF Core с AutoMapper

0 голосов
/ 07 августа 2020

У меня есть DTO, содержащий свойства и модель, например, студент может иметь более одного модуля, а модуль может быть связан с более чем одним студентом. свойства отображаются нормально, но модель не отображается.

 public class GetStudentByIdMapping : Profile
{
    public GetStudentByIdMapping()
    {
        CreateMap<Student,StudentDetails>();
        CreateMap<Module, StudentDetails>()
            .ForPath(dest => dest.StudentModules.ModuleName, opt => opt.MapFrom(m => m.ModuleName))
            .ForPath(dest => dest.StudentModules.ModuleCode, opt => opt.MapFrom(m => m.ModuleCode))
            .ForPath(dest => dest.StudentModules.Description, opt => opt.MapFrom(m => m.Description))
            .ReverseMap();


    }
}


    public async Task<StudentDetails> GetStudent(int studentId)
    {
        var student = context.Student
                             .Where(s => s.StudentId == studentId)
                             .FirstOrDefault();

        var module = await context.Order
                           .Include(m => m.Module)
                           .Where(o => o.StudentId == studentId)
                           .Select(m => m.Module).ToListAsync();


        var studMap =  Mapper.Map<StudentDetails>(student);
        Mapper.Map<StudentDetails>(module);


        return studMap;
    }

Это модели представления, которые я хочу сопоставить с моделью модели в модели представления StudentDetails. Сущности, созданные EF Core

public partial class Student
{
    public Student()
    {
        Order = new HashSet<Order>();
    }

    public int StudentId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }

    public virtual ICollection<Order> Order { get; set; }
}

public partial class Module
{
    public Module()
    {
        Order = new HashSet<Order>();
    }

    public int ModuleId { get; set; }
    public int? LectureId { get; set; }
    public string ModuleName { get; set; }
    public string ModuleCode { get; set; }
    public string Description { get; set; }
    public string ModulePath { get; set; }

    public virtual Lecture Lecture { get; set; }
    public virtual ICollection<Order> Order { get; set; }
}

1 Ответ

0 голосов
/ 10 августа 2020

Вам нужно только передать созданный пункт назначения второму вызову карты :

Просто попробуйте следующий код при сопоставлении:

 var studMap = Mapper.Map<Student,StudentDetails>(student);
 Mapper.Map<Module,StudentDetails>(module,studMap);

Затем studMap получит значение всех отображаемых полей.

...