Я сопоставляю некоторые классы POCO с существующей базой данных с несколькими таблицами поиска, и мне было интересно, каков будет наиболее эффективный или рекомендуемый способ продолжения.
Допустим, есть класс модели Employee
, которыйсопоставляется с таблицей Employee:
public class Employee
{
public int ID { get; set }
public string Name { get; set }
[ForeignKey("Role")]
public int RoleID { get; set }
public virtual EmployeeRole Role { get; set }
}
, а класс / таблица EmployeeRole
выглядит следующим образом:
public class EmployeeRole
{
public int ID { get; set } // For instance: 1
public string Description { get; set } // for instance: Manager
}
Я знаю, что не нужно явно объявлять внешний ключ RoleID
, но на самом деле мне приходится выполнять довольно большое количество запросов, которые зависят от Employee
, имеющего EmployeeRole
от «Менеджера».
Теперь вопрос в том, что лучше с точки зрения сочетания эффективности,читабельность кода и «независимость данных»?Предполагая, что employees
является IQueryable
, только что извлеченным из хранилища:
employees.Where(e => e.RoleID == 1);
employees.Where(e => e.EmployeeRole.ID == 1);
employees.Where(e => e.EmployeeRole.Description == "Manager");
2 и 3 имеют недостаток, заключающийся в том, что свойство навигации лениво загружается, но у 1 есть недостаток, заключающийся в том, что RoleID == 1
довольно бессмысленен и связан с текущим состоянием базы данных.
Как следуетЯ продолжаю?Есть ли вариант 4?