0

这可能是“走得太深”的情况,但我想我还是会问。我有以下型号:

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
}

所以用简单的英语来说,一个考试有一个考试结果的集合。每个 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 =

话虽如此,如何在不为每个 ExamResult 运行额外查询的情况下从 ExamDomain 表中获取所有必要的域名?

PS:我确实有一个视图模型,但这对于这个问题的目的来说并不重要。

4

1 回答 1

0

这里有两个选项可以包含隐藏在集合下方的属性。

首先,字符串 .Include 语法应该可以工作:

   db.Exams.Include("ExamResults.ExamDomain")

或我个人偏好使用 lambda:

   db.Exams.Include(e => e.ExamResults.Select(r=>r.ExamDomain))

查看 RoMillers(来自 EF)关于如何使用 lambda 包含的帖子。他还在这篇文章中谈到了基于集合的包含http://romiller.com/2010/07/14/ef-ctp4-tips-tricks-include-with-lambda/

于 2012-10-24T19:00:40.007 回答