Search code examples
c#entity-frameworklinqcode-first

Entity Framework multiple table with linq


for code first models:

public class User
{
    [Key]
    public long Id { get; set; }
    public virtual List<Address> Addresses { get; set; }
    public string UserName { get; set; }
} 

public class Address
{
    [Key]
    public long Id { get; set; }
    public string Reference { get; set; }
    public string Street { get; set; }
}

I created entity framework model from code first. Its working fine. Now i want to query select for User table using linq.

public IEnumerable GetLicensee()
{
    using (var db = new DataModelContext())
    {
        IEnumerable query = (from b in db.User
                             select new { UserName= b.UserName,Address=b.Addresses }).ToList();

        return query;
    }
}

It's not returning address table, only returns username.


Solution

  • EF by default turned on Lazy Loading, so You need use eager loading by call Include(), this method also get releated Entities, in your case Include("Addresses") method get releated Adressess

    Eager loading is the process whereby a query for one type of entity also loads related entities as part of the query. Eager loading is achieved by use of the Include method.

    public IEnumerable GetLicensee()
    {
            using (var db = new DataModelContext())
            {
            IEnumerable query = (from b in db.User.Include("Addresses")
                         select new { UserName= b.UserName,Address=b.Addresses }).ToList();
    
                return query;
            }
     }
    

    Here find more