ответ на мой вопрос может быть тривиальным, но я не могу понять, как это сделать.
Предположим, у нас есть следующая ситуация:
DB EF-Entityс вложенными свойствами:
public partial class Employee
{
public int ID { get; set;}
public virtual ICollection<EmployeeDepartmentHistory> EmployeeDepartmentHistory { get; set;}
public virtual ICollection<JobCandidate> JobCandidate { get; set;}
}
A Класс домена Employee
(связанные классы не имеют значения для этого примера)
public class Employee
{
public int ID { get; set;}
public IEnumerable<Department> Departments { get; set;}
public IEnumerable<JobCandidate> Candidates { get; set;}
}
Класс обслуживания EmployeeService
который применяет бизнес-правила к запросу
public class EmployeeService
private RepoTestEntities1 _Database;
public EmployeeService(RepoTestEntities1 database)
{
_Database = database;
}
public IQueryable<DomainModels.Employee> GetSalariedEmployeesByDepartmentName(string departmentName)
{
_Database.Configuration.LazyLoadingEnabled = false;
return _Database.Employee
.Include(e => e.EmployeeDepartmentHistory)
.Include(e => e.JobCandidate)
.Include(e => e.EmployeeDepartmentHistory.Select(his => his.Department))
.AsNoTracking()
.WhereDepartmentName(departmentName)
.WhereSalariedFlag(true)
.Select(e => CreateEmployee(e));
}
private DomainModels.Employee CreateEmployee(Employee e)
{
[...] (transform to domain)
}
WhereDepartmentName
и WhereSalariedFlag
реализованы как методы расширения для IQueryable<Employee>
.
Теперь к вопросу
Предположим, мне нужны дополнительные методы, которые извлекают сотрудников из DbContext, и я не хочу использовать отложенную загрузку.
Повторный вызов всех этих включений является избыточным, подверженным ошибкам и утомительным.Знаете ли вы элегантный способ всегда включать необходимые свойства для всех методов EmployeeService
?
Может ли стратегия быть жизнеспособным подходом?