这可能是“走得太深”的情况,但无论如何我想我会问。我有以下型号:
public class Exam
{
public int ID {get; set;}
//...other Exam properties
public virtual ICollection<ExamResults> Results {get; set;}
}
public class ExamResults
{
public int ExamId {get; set;}
//...other Exam Result properties
public int ExamDomainId {get; set;}
public virtual ExamDomain ExamDomain {get; set;}
}
public class ExamDomain
{
public int ID {get; set;}
public String DomainName {get; set;}
//...more stuff
}
所以用简单的英语,考试有一系列的ExamResults。每个ExamResult都有一个ExamDomain,每个ExamDomain都有一个名称。
问题是:我的视图每次使用
时都会创建一个新的数据库查询@Html.DisplayFor(e => e.exampleResult.ExamDomain.DomainName)
我无法在初始控制器查询中包含ExamDomain,因为Exam没有带Exam的导航属性。例如:
//The below does not work because ExamResults is a collection, not a record
var exam = db.Exams.Include(e => e.ExamResults.ExamDomain)...
//The code below also does not work, but it does run
var exam = db.Exams.Include(e =
话虽如此,如何从ExamDomain表中获取所有必需的DomainNames而不为每个ExamResult运行额外的查询?
PS:我确实有一个视图模型,但这个问题的目的并不重要。
答案 0 :(得分:0)
这里有两个选项可以包含隐藏在集合下方的专业资料。
首先,字符串.Include语法才能正常工作:
db.Exams.Include("ExamResults.ExamDomain")
或我个人喜欢使用lambda:
db.Exams.Include(e => e.ExamResults.Select(r=>r.ExamDomain))
Checkout RoMillers(来自EF)发布关于如何使用lambda的帖子。他还在这篇文章中讨论了基于收集的内容http://romiller.com/2010/07/14/ef-ctp4-tips-tricks-include-with-lambda/