ASP.Net MVC BP Получает данные из альтернативного источника данных, не хранящегося в базе данных

#c# #asp.net #asp.net-mvc #entity-framework

#c# #asp.net #asp.net-mvc #entity-framework

Вопрос:

Я собираюсь создать приложение для отображения разного статуса объектов, которые хранятся в разных местах.

Для упрощения я покажу один из наборов данных:

Сотрудник

 public class Employee
{
    public Employee()
    {
    }
    public Employee(User p)
    {
        Firstname = p.Person.Firstname;
        Lastname = p.Person.Surname;
        Department = new Department(p.Person.Department);
    }
    [Display(Name = "First name")]
    [Required]
    public string Firstname { get; set; }
    [Display(Name = "Last name")]
    [Required]
    public string Lastname { get; set; }
    public EmployeeType EmployeeType { get; set; }
    [StringLength(10)]
    [RegularExpression("\d{,10}")]
    [Display(Name = "SAP Pno.")]
    public string SapPersonalNumber { get; set; }
    [Required]
    public virtual Department Department { get; set; }
    [NotMapped]
    public User User { get; set; }
}
  

кроме того, другие свойства «User» не отображаются в моей базе данных, но могут быть получены путем вызова API (подключение к AD).
Поэтому, когда создается объект Employee, свойство User всегда равно null, что приводит к моему вопросу:

В моем хранилище EmployeeRepository я создал метод, который принимает объект Employee и возвращает объект User, но кто должен отвечать за добавление объекта User в объект Employee?

Должно ли это обрабатываться внутри виртуальной машины / контроллера, должен ли сам репозиторий устанавливать объект пользователя сотрудника и возвращать завершенный объект сотрудника вместо объекта пользователя или есть другие решения, о которых я еще не думал?

Комментарии:

1. В качестве примечания, если вы отредактируете это и отправите форму, это вызовет исключение, потому что нет конструктора без параметров

2. @StephenMuecke спасибо за ваш ответ, но поверх моей модели есть конструктор без параметров 🙂

3. Форматирование вашего кода помогает 🙂 Но это, вероятно, будет закрыто как основанное на мнениях

4. Хорошо, так что это просто вопрос мнения… думал, что есть лучшая практика или что-то в этом роде … 🙁

5. Лично я бы попросил контроллер вызвать службу, которая получает Employee данные из базы данных, и вызвать другую службу, которая получает User данные из AD, чтобы они не были связаны (и это упростило бы модульное тестирование). И Employee ваша модель данных, поэтому не должна содержать User — у вас должна быть модель представления, которая содержит свойства для Employee и User