Как получить Automapper для сопоставления атрибута, который является частью другой таблицы - PullRequest
0 голосов
/ 20 октября 2019

У меня есть 3 таблицы, которые связаны между собой. Employee, Relative, RelationTypeCatalog. Отношения IX_Relatives_EmployeeId и IX_Relatives_RelationTypeCatalogId. Я пытаюсь добиться того, чтобы при возвращении списка родственников сотрудника я хотел, чтобы в поле «Отношения» отображалось значение, хранящееся в «RelationType», которое является свойством класса RelationTypeCatalog.
Я являюсь новымдля кодирования и автоматизации, я мог бы действительно использовать некоторую помощь и руководство. Я смог получить как можно больше поля «Отношения». Вот код

    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime DateOfBirth { get; set; }
        public string DNI { get; set; }

        public ICollection<Relative> Relatives { get; set; }

    }

    public class Relative
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime DateOfBirth { get; set; }
        public Employee Employee { get; set; }
        public int EmployeeId { get; set; }
        public RelationTypeCatalog RelationTypeCatalog { get; set; }
        public int RelationTypeCatalogId { get; set; }   
    }

    public class RelationTypeCatalog
    {

        public int Id { get; set; }
        public string RelationType { get; set; }
        public ICollection<Relative> Relatives { get; set; }

    }

    public class RelativeToReturnDto
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Relationship { get; set; }

    }

and here is the Automapper

    public class AutoMapperProfiles : Profile
    {
          CreateMap<Relative, RelativeToReturnDto>()
            .ForMember(dest => dest.Age,
            opt => opt.MapFrom(src => src.DateOfBirth.CalculateAge()))
            .ForMember(dest => dest.Relationship,
            opt => opt.MapFrom(src => src.RelationTypeCatalog.RelationType));
    }

Вот ответ JSON, который я получаю.

{
    "id": 1,
    "name": "Camacho",
    "age": 29,
    "dni": "(865) 494-2026",
    "relatives": [
        {
            "id": 3,
            "name": "Diego",
            "age": 15,
            "relationship": null
        }
}

Я ожидаю получить "relationship": "Espouse", соответствующее значению в поле 'RelationType'

1 Ответ

1 голос
/ 20 октября 2019

Как утверждает Роб, проблема, по-видимому, вызвана вашим вводом, а не AutoMapper, как в следующем примере сопоставлено Relationship:

var mapper = new Mapper(new MapperConfiguration(cfg => cfg.AddProfile<AutoMapperProfiles>()));
var relative = new Relative { RelationTypeCatalog = new RelationTypeCatalog { RelationType = "rel1" } };
var dto = mapper.Map<RelativeToReturnDto>(relative);
Debug.Assert(dto.Relationship == "rel1");
...