使用实体框架选择子对象列表时,如何获取对相关父对象的引用

问题描述:

使用EF如何访问子对象列表时使用EF如何访问父属性中的值。使用实体框架选择子对象列表时,如何获取对相关父对象的引用

即我有一个项目目标和时间表对象

项目
标识
名称
...

的TimeSheet
专案编号
用户ID
日期
TimeSpent
...

我知道如何找回项目及其相关的时间表,但如果我想拿回所有的时间表的给定用户,然后简单地显示与每个时间表记录的项目名称是什么。

例如ProjectName,Date,TimeSpent

创建一个新实体来形成结果集或者我应该能够返回IEnumerable并访问.Project.Name字段是最佳实践。

这是超级容易使用LINQ to SQL或只是直线上升ADO.net/SPs等,但其对EF笑死我了..

任何想法?

孩子们总是和父母有关系。在你的情况下,它可能被称为“TimeSheet.Project”。因此,您可以编写如下查询:

var q = from u in Context.Users 
     where u.UserId == userId 
     from ts in u.TimeSheets 
     select new 
     { 
      ProjectName = ts.Project.Name, 
      Date = ts.Date, 
      TimeSpent = ts.TimeSpent 
     }; 
+0

谢谢。因此,如果您使用存储库模式,您会将其投影到可以通过图层传递的新实体中,还是仅通过匿名类型? – Chet 2009-09-19 22:45:39

+0

匿名类型很难返回。你的方法可能需要返回像IQueryable 所以对于Repository模式,在这种情况下,我建议返回一个IQueryable ,为此目的创建SomePOCO。 – 2009-09-19 23:23:28