加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:22:30 所属栏目:百科 来源:网络整理
导读:让我来解释一下自己. 在LINQ的帮助下,我正在向我的数据库请求一个对象: int idGetClient=1;Client clientToUpdate = context.Client.FirstOrDefault(p=p.idClient == idGetClient); 在我的模型中,客户端与另一个名为Site的对象相关.所以我可以通过调用以下
让我来解释一下自己.

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

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

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

Site siteToUpdate = clientToUpdate.Site;

所以我想知道这里发生了什么,LINQ ALREADY在我的第一个请求中加载了结果还是他请求再次接收我的客户信息并查找我的数据库?

第二个看起来对我来说是最合乎逻辑的,但我想确定,因为如果第一个案例发生了什么,它将导致一些性能问题.

解决方法

如果未指定任何其他内容,则您的属性Site将被延迟加载,因此在您尝试访问该属性时,Entity将查询数据库服务器.

如果对数据库服务器的第二次访问会导致性能问题,则可以使用以下命令阻止:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读