使用Entity Framework返回所有相关实体

时间:2017-06-01 23:27:27

标签: c# entity-framework

我第一次玩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;
}

Request对象有一些相关实体,例如与Results表具有1对1关系的Request表。但是他们都回来了。

如何查询Entity Framework并返回实体及其所有相关实体?

TIA

2 个答案:

答案 0 :(得分:4)

使用预先加载的单一查询

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(); 

如果启用延迟加载,则每次访问Results列表的Request属性时,都会对数据库执行查询以便为您加载,这可能会导致N + 1问题。但是,EntityFramework Core上尚未提供延迟加载。

答案 1 :(得分:0)

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

db.Entry(Requests).Reference(p => p.Code).Load(); 

如果要在datacontext构造函数集

上自动加载所有内容
this.Configuration.LazyLoadingEnabled = true;