Lazy Loading vs Eager Loading

前端 未结 8 1249
予麋鹿
予麋鹿 2020-11-27 10:36

Lazy loading in Entity Framework is the default phenomenon that happens for loading and accessing the related entities. However, eager loading is referred to the practice of

相关标签:
8条回答
  • 2020-11-27 10:45

    Lazy loading will produce several SQL calls while Eager loading may load data with one "more heavy" call (with joins/subqueries).

    For example, If there is a high ping between your web and sql servers you would go with Eager loading instead of loading related items 1-by-1 with lazy Loading.

    0 讨论(0)
  • 2020-11-27 10:46
    // Using LINQ and just referencing p.Employer will lazy load
    // I am not at a computer but I know I have lazy loaded in one
    // query with a single query call like below.
    List<Person> persons = new List<Person>();
    using(MyDbContext dbContext = new MyDbContext())
    {
        persons = (
            from p in dbcontext.Persons
            select new Person{
                Name = p.Name,
                Email = p.Email,
                Employer = p.Employer
            }).ToList();
    }
    
    0 讨论(0)
  • 2020-11-27 10:50

    Consider the below situation

    public class Person{
        public String Name{get; set;}
        public String Email {get; set;}
        public virtual Employer employer {get; set;}
    }
    
    public List<EF.Person> GetPerson(){
        using(EF.DbEntities db = new EF.DbEntities()){
           return db.Person.ToList();
        }
    }
    

    Now after this method is called, you cannot lazy load the Employer entity anymore. Why? because the db object is disposed. So you have to do Person.Include(x=> x.employer) to force that to be loaded.

    0 讨论(0)
  • 2020-11-27 10:59

    I think it is good to categorize relations like this

    When to use eager loading

    1. In "one side" of one-to-many relations that you sure are used every where with main entity. like User property of an Article. Category property of a Product.
    2. Generally When relations are not too much and eager loading will be good practice to reduce further queries on server.

    When to use lazy loading

    1. Almost on every "collection side" of one-to-many relations. like Articles of User or Products of a Category
    2. You exactly know that you will not need a property instantly.

    Note: like Transcendent said there may be disposal problem with lazy loading.

    0 讨论(0)
  • 2020-11-27 11:01

    Eager Loading When you are sure that want to get multiple entities at a time, for example you have to show user, and user details at the same page, then you should go with eager loading. Eager loading makes single hit on database and load the related entities.

    Lazy loading When you have to show users only at the page, and by clicking on users you need to show user details then you need to go with lazy loading. Lazy loading make multiple hits, to get load the related entities when you bind/iterate related entities.

    0 讨论(0)
  • 2020-11-27 11:05

    It is better to use eager loading when it is possible, because it optimizes the performance of your application.

    ex-:

    Eager loading
    
    var customers= _context.customers.Include(c=> c.membershipType).Tolist();
    
    lazy loading
    

    In model customer has to define

    Public virtual string membershipType {get; set;}
    

    So when querying lazy loading is much slower loading all the reference objects, but eager loading query and select only the object which are relevant.

    0 讨论(0)
提交回复
热议问题