程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 學習EF之貪懶加載和延遲加載(2),ef延遲

學習EF之貪懶加載和延遲加載(2),ef延遲

編輯:關於.NET

學習EF之貪懶加載和延遲加載(2),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發現,延遲加載是在我們需要某一個外部實體時才從數據庫中查找的

換成貪懶加載

 結論;

延遲加載是在我們需要的時候才去加載,當需要加載大量的外鍵對象時會增加與數據庫的讀取次數

此時可以考慮貪婪加載

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved