首先使用EF 6代码。我有一个Entity类和一个Name类,并希望查询所有Entity对象的列表及其各自的Names,以便我可以在Gridview控件上显示。
这些是我的班级定义:
public class Entity
{
[Key]
public int EntityKey { get; set; }
public virtual ICollection<Name> Names { get; set; }
}
public class Name
{
[Key]
public int NameKey { get; set; }
public int EntityKey { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual Entity Entity { get; set; }
}
在我的数据访问层中,我有一个从数据库中获取所有实体的方法:
public List<Entity> GetEntities()
{
SdmDBContext entityDbContext = new SdmDBContext();
return entityDbContext.Entities.ToList();
}
但是使用此查询,我没有获得与Entity类关联的Name。我已经尝试过LINQ和lambda表达式,以及.Include操作,但不确定如何正确地表达语法。
如何更改DAL方法以返回与所有现有实体关联的名称?
答案 0 :(得分:3)
您的代码正在加载实体表中的实体列表,并且在“延迟加载”时,它还应该在您访问它们时返回关联的Name
集合。您将ICollection
声明为虚拟以启用“延迟加载”,因为当您访问尚未急切加载的内容时,将创建代理对象以发出数据库请求。
Include
只是通过使用对象上定义的导航属性来急切加载相关实体的请求。您可以使用lambda或字符串来调用Include
,该字符串或字符串表示您想要加载的导航属性的名称。
例如:
public List<Entity> GetEntities()
{
SdmDBContext entityDbContext = new SdmDBContext();
return entityDbContext.Entities.Include("Names").ToList();
}