使用实体框架返回所有相关实体

Nug*_*ugs 3 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 c).ToList();
    }

    return requests;
}
Run Code Online (Sandbox Code Playgroud)

有一些与Request对象相关的实体,例如与Results表具有一对一关系的Request表。但是,它们都返回 null。

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

TIA

Iva*_*azz 6

使用预先加载的单一查询

db.Requests.Where(req => req.Code == code)
    .Include(req => req.Results) // Joining is performed here
    .Include(req => req.SomeOtherProperty)
    .ToList()
Run Code Online (Sandbox Code Playgroud)

使用显式加载的多个查询

// 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(); 
Run Code Online (Sandbox Code Playgroud)

如果开启了延迟加载,每次访问list的Results属性时Request,都会在数据库上执行一个查询来为你加载,这可能会导致N+1问题。不过,延迟加载在 EntityFramework Core 上尚不可用。