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中可用