gpt4 book ai didi

c# - LINQ 是否加载请求中的每个对象?

转载 作者:行者123 更新时间:2023-11-30 14:09:35 24 4
gpt4 key购买 nike

让我解释一下。

在 LINQ 的帮助下,我正在向我的数据库请求一个对象,例如:

int idGetClient=1;
Client clientToUpdate = context.Client.FirstOrDefault(p=>p.idClient == idGetClient);

在我的模型中,一个客户端与另一个名为 Site 的对象相关。所以我可以通过调用轻松地从我的 SQL 数据库中获取我的 Site 对象:

Site siteToUpdate = clientToUpdate.Site;

所以我想知道这里发生了什么,LINQ 是否已经在我的第一个请求中加载了结果,或者他是否再次请求获取我的客户信息并在我的数据库中查找?

第二种情况对我来说看起来最合乎逻辑,但我想确定一下,因为如果第一种情况发生,它会导致一些性能问题。

最佳答案

如果未指定任何其他内容,您的属性 Site 将被延迟加载,因此就在您尝试访问该属性的那一刻,实体将查询数据库服务器。

如果对数据库服务器的第二次访问会导致性能问题,您可以通过以下方式防止这种情况:

  int idGetClient=1;
Client clientToUpdate = context.Client
.Include("Site")
.FirstOrDefault(p=>p.idClient == idGetClient);

并且你可以添加任意多的Include,你甚至可以加载属性的属性:

  int idGetClient=1;
Client clientToUpdate = context.Client
.Include("Site")
.Include("Site.SubProperty")
.FirstOrDefault(p=>p.idClient == idGetClient);

Include 将强制预先加载指定的属性。

更多信息在这里: https://msdn.microsoft.com/en-us/data/jj574232.aspx

关于c# - LINQ 是否加载请求中的每个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28450475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com