C# 返回实体框架中的所有相关实体

C# 返回实体框架中的所有相关实体,c#,entity-framework,C#,Entity Framework,我第一次使用实体框架。我正在编写以下简单的查询: public List<Request> GetResult(string code) { List<Request> requests = new List<Request>(); using (var db = new Context()) { requests = (from c in db.Requests where c.Code == code select

我第一次使用实体框架。我正在编写以下简单的查询:

public List<Request> GetResult(string code)
{
    List<Request> requests = new List<Request>();

    using (var db = new Context())
    {
        requests = (from c in db.Requests where c.Code == code select c).ToList();
    }

    return requests;
}
public List GetResult(字符串代码)
{
列表请求=新列表();
使用(var db=new Context())
{
requests=(来自db.requests中的c,其中c.Code==代码选择c.ToList();
}
返回请求;
}
有一些与
请求
对象相关的实体,例如与
请求
表具有1对1关系的
结果
表。然而,他们都回来了

如何使用实体框架查询并返回实体及其所有相关实体


TIA

如果要选择要加载的对象,请使用

db.Entry(Requests).Reference(p => p.Code).Load(); 
如果要在datacontext构造函数集中自动加载所有

this.Configuration.LazyLoadingEnabled = true; 

使用即时加载的单个查询

db.Requests.Where(req => req.Code == code)
    .Include(req => req.Results) // Joining is performed here
    .Include(req => req.SomeOtherProperty)
    .ToList()
使用显式加载的多个查询

// Hits the database once.
var requests = db.Requests.Where(req => req.Code == code).ToList();
var requestIDs = requests.Select(req => req.ID);
// Hits the database another time to load your Results property.
db.Results.Where(res => requestIDs.Contains(res.RequestID)).Load(); 

如果启用了延迟加载,则每次访问
请求
列表的
结果
属性时,都会对数据库执行一个查询来为您加载,这可能会导致N+1问题。不过,EntityFramework Core上尚未提供延迟加载。

您使用的是哪个版本的EntityFramework?您可以发布您的
请求
对象吗?
LazyLoadingEnabled
向卸载的虚拟财产发出请求的新查询。它不会按照OP的请求预先自动加载这些属性。默认情况下启用延迟加载。添加System.Data.Entity命名空间后,您的渴望加载示例很好地实现了这一点。谢谢!延迟加载现在在EF Core 2.1中可用