C # Linq Объединить 2 ObservableCollections в новый - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть 3 класса (данные T1 и T2 поступают из файла SQLite)

T1 (EmployeeEntity -> Id, FirstName, LastName, DepartmentFK) << DepartmentKey isвнешний ключ для T2.Id </p>

T2 (DepartmentEntity -> Id, Department)

T3 (DepartmentEmployee -> Id, FirstName, LastName,DepartmentFK, Department) << Id должен совпадать с T1.Id (сделать сохранение изменений обратно намного проще) </p>

В моей модели представления я создаю новую коллекцию ObservableCollection public ObservableCollection<DepartmentEmployee> EmployeesView и хочу заполнить ихданные из 2 таблиц SQLite, и вот как я это делаю:

    get
    {
        var t1 = new ObservableCollection<EmployeeEntity>(_emp.GetAll().ToObservable());
        var t2 = new ObservableCollection<DepartmentEntity>(_dep.GetAll().ToObservable());
        var result = t1.Join(t2, t => t.DepartmentFK, t => t.Id, (EmployeeEntity, DepartmentEntity) =>
        {
            var t3 = _mapper.Map<EmployeeEntity, DepartmentEmployee>(EmployeeEntity);
            t3 = _mapper.Map(DepartmentEntity, t3);
            return t3;
        });
        _employeesview = result.ToObservable();
        return _employeesview;
    }

Это работает для моего просмотра (я могу отобразить FirstName, LastName и соответствующий отдел (на основе внешнего ключа)), но когда я пытаюсьчтобы сохранить мои изменения обратно, он изменяет неправильную запись. Моя проблема заключается в следующем:

T1

1 - Test - User - 2
2 - Another - User -3
3 - Third - User - 1

T2

1 - Development
2 - HR
3 - Production

приводит к этому

T3

2 - Test - User - 2 - HR
3 - Another - User - 3 - Production
1 - Third - User - 1 - Development

поэтому он «убивает» мой идентификатор сотрудника и заменяет его идентификатором отдела. Так как я могу это исправить?


доп. Информация: это мои отображения, которые я сделал

        cfg.CreateMap<DepartmentEntity, Departments>();
        cfg.CreateMap<Departments, DepartmentEntity>();
        cfg.CreateMap<EmployeeEntity, DepartmentEmployee>();
        cfg.CreateMap<DepartmentEmployee, EmployeeEntity>();
        cfg.CreateMap<DepartmentEntity, DepartmentEmployee>();

1 Ответ

0 голосов
/ 03 ноября 2019

глупо, мне пришлось поставить "Id" на игнорирование в моем отображении

->

cfg.CreateMap<DepartmentEntity, DepartmentEmployee>().ForMember(dest => dest.DepartmentFK, opt => opt.MapFrom(src => src.Id)).ForMember(dest => dest.Id, act => act.Ignore());

сделал свое дело:)

...