#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