Используя MVC 5 и Entity Framework, я пытаюсь настроить ViewModel для представления индекса для демонстрации сотрудников и их целей. У меня есть таблица сотрудников, таблица employeeMap (таблица соединений с полезной нагрузкой) и таблица целей. Существует отношение «один ко многим» между Employee и EmployeeMap, а также между Goal и EmployeeMap. Я новичок и застреваю в индексном представлении, которое изначально должно отображать сотрудников, а когда выбран один сотрудник, должны отображаться цели сотрудников.
Я не могу правильно выполнить действие индекса:
var viewModel = new EmployeeGoals();
viewModel.Employees = db.Employees
.Include(d => d.Department)
.Include(e => e.Position)
.Include(m => m.EmployeeMaps)
.Where(d => d.OrganizationID == oid && d.Department.ManagerID == currentUser.EmployeeID)
.OrderBy(d => d.HireDate);
if (id != null)
{
ViewBag.EmployeeID = id.Value;
viewModel.EmployeeMaps = viewModel.Employees.Where(e => e.ID == id.Value).Single().EmployeeMaps;
viewModel.Goals = viewModel.EmployeeMaps.Where(e => e.EmployeeID == ViewBag.EmployeeID).Select(e => e.Goals);
}
if (goalID != null)
{
ViewBag.GoalID = goalID.Value;
viewModel.Activities = viewModel.Goals.Where(
x => x.ID == goalID).Single().Activities;
}
return View(viewModel);
Я правильно заполняю viewmodel.employees, но не viewmodel.goals
о, и модель просмотра:
public class EmployeeGoals
{
public IEnumerable<EmployeeMap> EmployeeMaps { get; set; }
public IEnumerable<Employee> Employees { get; set; }
public IEnumerable<Goal> Goals { get; set; }
}
Намек, который поможет мне пройти это, был бы замечательным. Спасибо
Получил работу, используя другой подход:
viewModel.Employees = db.Employees
.Include(d => d.Department)
.Include(e => e.Position)
.Include(m => m.EmployeeMaps)
.Where(d => d.OrganizationID == oid && d.Department.ManagerID == currentUser.EmployeeID)
.OrderBy(d => d.HireDate);
if (id != null)
{
ViewBag.EmployeeID = id.Value;
viewModel.EmployeeMaps = viewModel.Employees.Where(e => e.ID == id.Value).Single().EmployeeMaps;
viewModel.Goals = from g in db.Goals
join m in db.EmployeeMaps on g.ID equals m.GoalID
join e in db.Employees on m.EmployeeID equals e.ID
where m.EmployeeID == id.Value
select g;
}
не мог понять, как получить результат, используя свойства навигации, поэтому остановился на приведенном выше решении. Это работает, но не слишком ли часто я обращаюсь к базе данных?? Кроме того, в итоге получилось сочетание синтаксиса LINQ - я знаю, следует использовать только один из них :-/
viewModel.Goals
является подмножествомviewModel.EmployeeMaps
. Но где устанавливаетсяviewModel.EmployeeMaps
? - person Raymen   schedule 25.04.2014EmployeeMaps
, просто ничего не возвращает. Я бы разбил это на несколько строк, а затем запустил отладчик, чтобы вы могли проверить значение, возвращаемое вызовомWhere
, и посмотреть, есть ли на самом деле какие-либо связанные цели. - person Chris Pratt   schedule 25.04.2014