• 学习EF之贪懒加载和延迟加载(2)


    通过昨天对EF贪婪加载和延迟加载的学习,不难发现,延迟加载还是很好用的,但是问题也就来了,有的时候我们只需要加载一个实体,不需要和他相关的外部实体,这时候我们来看看EF延迟加载时怎么作用的吧

    打开profiler

    在Main函数入口处写一个查询,在Console.Read();处打一个断点

          static void Main(string[] args)
            {
                var context = new EFDbContext();
                var user = context.Users.FirstOrDefault(a => a.Id == 1);
                Console.WriteLine(user.Name);
                Console.Read();
            }
    

    在profiler中最后一行可以看他EF生成sql语句

    也就是说我们只需要实体本身的属性的时候EF不会帮我们加载外部实体

    接下来修改一下Main函数中的内容

          static void Main(string[] args)
            {
                var context = new EFDbContext();
                var users = context.Users.FirstOrDefault(a => a.Id == 1);
                //var users = context.Users.Include("Articles").FirstOrDefault(a => a.Id == 1);
                Console.WriteLine(users.Name);
                foreach (var a in users.Articles)
                {
                    Console.WriteLine(a.Title + "," + a.Category.Name + "
    ");
                }
                Console.WriteLine(users.Articles.Count() + "
    " + users.Categories.Count() + "
    ");
                Console.Read();
            }
    

    进行单步调试并观察profiler发现,延迟加载是在我们需要某一个外部实体时才从数据库中查找的

    换成贪懒加载

     结论;

    延迟加载是在我们需要的时候才去加载,当需要加载大量的外键对象时会增加与数据库的读取次数

    此时可以考虑贪婪加载

     
  • 相关阅读:
    免费录屏工具
    树莓派4安装mysql
    python中,print、变量、赋值详细理解篇01
    mysql db [Warning] IP address 'xxxx' could not be resolved: Name or service not known
    添加脚本命令
    LRUCache实现方案
    HTTP/2做错了什么?刚刚辉煌2年就要被弃用了!?
    TS 中的 export declare interface 和 export interface 到底有什么不同?
    使用nexus搭建npm私服
    nodejs 安装
  • 原文地址:https://www.cnblogs.com/cheesebar/p/5924351.html
Copyright © 2020-2023  润新知