设置
我有一个相当简单的 3 类设置如下。当然还有很多其他属性,但它们在这里不相关。
楷模
public class Employee {
public int EmployeeId { get; set; }
public string UserName { get; set; }
public string Name { get; set; }
public ICollection<Position> Positions { get; set; }
}
public class Position {
public int PositionId { get; set; }
public int EmployeeId { get; set; }
[ForeignKey("EmployeeId")]
public Employee Employee { get; set; }
public int location { get; set; }
[ForeignKey("location")]
public Location Location { get; set; }
}
public class Location {
public int LocationId { get; set; }
public string Name { get; set; }
}
控制器
public ActionResult Index() {
string username = User.Identity.Name;
Employee emp = context.Employees.Include(e => e.Positions).FirstOrDefault(e => e.UserName == username);
return View(emp);
看法
@model Employee
<h1>Hi @Model.Name</h1>
<ul>
@foreach (var position in @Model.Positions) {
<li>@position.Name - @position.Location.Name</li>
}
</ul>
问题
现在的问题是因为延迟加载。我在通话中收到NullReferenceException 。@item.Location.Name
它正在加载位置很好(foreach 中的项目)。
我尝试将我的包含更改为:
context.Employees.Include("Positions.Location").FirstOrDefault(e => e.UserName == username);
但后来我得到了错误:元数据集合中的多个项目与身份“位置”匹配。
如果我将Location
属性更改Position
为,PositionLocation
那么我得到:System.Reflection.AmbiguousMatchException: Ambiguous match found。
我是否应该使用一个 ViewModel 来加载多个查询到我的控制器中的上下文?这似乎需要维护更多的代码,如果我不需要,我宁愿不要。