【发布时间】:2014-04-25 13:50:28
【问题描述】:
利用 MVC 5 和实体框架我正在尝试为我的索引视图设置我的 ViewModel,以显示员工及其目标。 我有一个员工表、一个employeeMap 表(带有有效负载的连接表)和一个目标表。 Employee 和 EmployeeMap 以及 Goal 和 EmployeeMap 之间是一对多的关系。 I am a total newbie and getting stuck with an index view, which initially should display employees, and when one employee is selected should display the goals of the employees.
我无法正确执行索引操作:
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设置在哪里? -
您的代码似乎没有任何明显的问题。最有可能的是,涉及
EmployeeMaps的 LINQ 语句根本没有返回任何内容。我会把它分成几行,然后在上面运行调试器,这样你就可以检查从Where调用返回的值,看看是否真的有任何相关的目标。 -
@Raymen - 正确,我在示例中遗漏了这一点,我已经对其进行了编辑,现在留下了我认为是我真正的问题。如何填充 viewmodel.goals - 代码不起作用:-/
标签: asp.net-mvc entity-framework linq-to-entities asp.net-mvc-viewmodel