C# 实体框架4:获取两个表的数据并返回到persentation层

C# 实体框架4:获取两个表的数据并返回到persentation层,c#,asp.net,entity-framework-4,C#,Asp.net,Entity Framework 4,我有两个表有1对1的关系。一个表名为Person,第二个表名为PersonDetailsPesonId作为FK在PersonDetails表中 我可以像这样查询单个表 public static Person GetPersonById(int personId) { using (var context = new REntities()) { return context.Person.Where(p => p.PersonId == personId).Fir

我有两个表有1对1的关系。一个表名为
Person
,第二个表名为
PersonDetails
PesonId
作为
FK
PersonDetails
表中

我可以像这样查询单个表

public static Person GetPersonById(int personId)
{
    using (var context = new REntities())
    {
    return context.Person.Where(p => p.PersonId == personId).First();
    }
}
它用于消费代码,如:

Person personInfo = PersonService.GetPersonById(personId);
与主键上的
PersonDetail
相同,即
PersonDetail

但是,当我必须从两个表中获取数据时,我不知道该怎么做,以及将数据返回到表示层的最佳方式是什么

下面是获取
Person
和关联
PersonDetails
记录的代码:

from personData in context.person.Include("PersonDetail")
                                  where personData.PersonId == personId
                                  select personData;
这里的personData是什么? 如何迭代它并在客户机代码中获取每个项


谢谢。

当您获取Person对象时,您也可以在查询中包含PersonDetails对象,如下所示

using (var context = new REntities())
{
  return context.Person.Include("PersonDetail").Where(p => p.PersonId == personId).First();
}
from p in personInfo.PersonDetails
select p; // here p is the person detail object
现在在演示方面,当您获得Person对象时,像这样迭代每个Person细节项

using (var context = new REntities())
{
  return context.Person.Include("PersonDetail").Where(p => p.PersonId == personId).First();
}
from p in personInfo.PersonDetails
select p; // here p is the person detail object

希望有帮助。

如果您首先使用实体框架代码(EF 4.1),请将Person类中的PersonDetails属性标记为virtual。这将使EF能够自动填充数据,因此您只需执行
person.PersonDetails
即可获取数据列表