学习EF之贪懒加载和延迟加载

Posted 行走即歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习EF之贪懒加载和延迟加载相关的知识,希望对你有一定的参考价值。

通过昨天对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 + "\\n");
            }
            Console.WriteLine(users.Articles.Count() + "\\n" + users.Categories.Count() + "\\n");
            Console.Read();
        }

 

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

换成贪懒加载

 结论;

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

此时可以考虑贪婪加载

 

 

以上是关于学习EF之贪懒加载和延迟加载的主要内容,如果未能解决你的问题,请参考以下文章

EF延迟加载

EF 延迟加载和预先加载

asp.net EF学习系列----深入理解查询延迟加载技术

MVC3 EF4.1 代码优先延迟加载

EF 延迟加载

EF急切加载和延迟加载的区别?