首先使用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/

10-11 08:28