首先使用EF 6代码。我有一个Entity类和Name类,并想查询所有Entity对象及其各自的Name的列表,以便可以在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类关联的名称。我已经尝试过LINQ和lambda表达式以及.include操作,但是不确定如何正确地表达语法。
如何更改DAL方法以返回与所有现有实体关联的名称?
最佳答案
您的代码正在加载Entity表中的Entities列表,并且通过“延迟加载”,在访问它们时还应该返回关联的Name
集合。您将ICollection
声明为虚拟以启用“延迟加载”,因为当您访问尚未急切加载的内容时,将创建一个代理对象来发出数据库请求。Include
只是通过使用在对象上定义的导航属性来热切加载相关实体的请求。您可以使用表示要热切加载的导航属性名称的lambda或字符串调用Include
。
例如:
public List<Entity> GetEntities()
{
SdmDBContext entityDbContext = new SdmDBContext();
return entityDbContext.Entities.Include("Names").ToList();
}
关于c# - EF LINQ-如何查询由外键关联的2个表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37102448/