EF Code First支持開箱即用的關係。您可以使用約定或顯式指定關係(例如,如果外鍵屬性被命名爲怪異的)。在這裏看到,例如:https://msdn.microsoft.com/en-us/data/hh134698.aspx
當你配置你的模型沒錯,你應該能夠訪問部門,像這樣:
var currentUser = _unitOfWork.Employee.GetEmployeeByID(loggedInUser.GetUser(user).Id);
var job = currentUser.Job;
var department = job.Department;
// or
var department = _unitOfWork.Employee.GetEmployeeByID(loggedInUser.GetUser(user).Id).Job.Department;
要表明,在同一部門工作的所有員工:
var coworkers = department.Jobs.SelectMany(j => j.Employees);
更新
要使用預先加載有一個倉儲類(你笑uldn't需要多個庫類在這種情況下,因此不需要使用工作單位):
public class EmployeeRepository {
private readonly MyContext _context = new MyContext(); // Or whatever...
public IList<Employee> GetCoworkers(int userId) {
var currentEmployee = _context.Employees
.Where(e => e.UserId == userId)
.Include(e => e.Job.Department) // Use eager loading; this will fetch Job and Department rows for this user
.FirstOrDefault();
var department = currentEmployee.Job.Department;
var coworkers = department.Jobs.SelectMany(j => j.Employees);
return coworkers;
}
}
,並調用它是這樣的...
var repo = new EmployeeRepository();
var coworkers = repo.GetCoworkers(loggedInUser.GetUser(user).Id);
你可能會能夠通過選擇當前用戶的工作和部門(比如我已經完成),然後在相反的工作和員工回來時使存儲庫查詢更高效。我會留給你的。
我認爲他已經使用EF因爲他說他使用Code First流利的API – trousyt
嗨,謝謝你的迴應。我使用EF作爲Code First和Fluent API。我曾嘗試調用我的變量中的外鍵屬性,例如employee.Department.Employees,但由於某種原因返回null。 –
默認情況下,導航屬性未初始化,要加載導航屬性,必須使用** include **語句明確指定此屬性,請參閱此鏈接https://msdn.microsoft.com/zh-cn/data/jj574232.aspx – ironstone13