элемент с существующим ключом, при создании MappingConfiguration - PullRequest
0 голосов
/ 11 октября 2019
public class ClinicController
{
    private List<Employee> Employees;
    private List<Patient> Patients;
    private Mapper _objectMapper;

    public ClinicController()
    {
        Employees = new List<Employee>();
        Patients = new List<Patient>();
        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<Doctor, DoctorDto>().ReverseMap();
            //cfg.CreateMap<Employee, Doctor>();
            //cfg.CreateMap<DoctorDto, Doctor>();
            //cfg.CreateMap<Employee, EmployeeDto>();
            //cfg.CreateMap<Patient, DoctorDto>();
        });
        _objectMapper = new Mapper(config);
    }
}

Когда я создаю экземпляр этого класса, при каждом создании конфигурации возникает исключение. Там написано:

"An item with the same key has already been added"

Я читаю вопросы с той же проблемой, и, похоже, не могу понять проблему. Отладка кода показала, что программе никогда не удается инициализировать Mapper, она вылетает прямо перед инициализацией конфигурации.

Что я пропустил?

Классы:

public abstract class PersonDto
{
    public string Name { get; set; }
    public string Surnames { get; set; }
    public string Data{ get; set; }
    public string Email { get; set; }
    public string Telephone { get; set; }
    public string Direction { get; set; }
}
public abstract class Person
{
    public string Name { get; set; }
    public string Surnames { get; set; }
    public string Data { get; set; }
    public string Email { get; set; }
    public string Telephone { get; set; }
    public string Direction { get; set; }
}
public class Patient : Person
    {
        public string Service { get; set; }
        public float Pay { get; set; }
    }
    public class Employee : Person
    {
        public string Job { get; set; }
        public float Salary { get; set; }
    }
public class Doctor : Employee
{
    public new string Job = "Doctor";
}

Это классы с теми же свойствами, что и оригиналы (я не включил методы, поскольку они не имеют значения). Dtos следуют той же структуре, что и сами сущности.

1 Ответ

0 голосов
/ 11 октября 2019

Если Doctor DTO также «перезаписал» свойство Job, оно будет аварийно завершено, поскольку будет 2 «Ключа» Job. Не используйте новую строку и найдите другой способ сделать это. Поскольку вы отображаете докторов в их DTO, не нужно указывать значение задания (если оно не изменено и не сохранено в БД).

...