Assume we have the following entities:
Code: Select all
public class UserRole
{
public Guid Id { get; set; }
public String Name { get; set; }
public virtual IList<User> Users { get; set; }
}
public class User
{
public Guid Id { get; set; }
public String Name { get; set; }
public Guid UserRoleId { get; set; }
public virtual UserRole UserRole { get; set; }
public virtual IList<Message> Messages { get; set; }
public virtual IList<Picture> Pictures { get; set; }
}
public class Message
{
public Guid Id { get; set; }
public String Text { get; set; }
public Guid UserId { get; set; }
public virtual User User { get; set; }
}
public class Picture
{
public Guid Id { get; set; }
public String Name { get; set; }
public Guid UserId { get; set; }
public virtual User User { get; set; }
}
First I've tried to disable Lazy loading:
Code: Select all
DbAccess.ActiveContext.Configuration.LazyLoadingEnabled = false;
var userRoles = DbAccess.ActiveContext.UserRoles.AsNoTracking().ToList();
After that I've tried Eager loading:
Code: Select all
var userRoles = DbAccess.ActiveContext.UserRoles.AsNoTracking().Include(ur => ur.Users.Select(us => us.Messages))
.Include(ur => ur.Users.Select(us => us.Pictures)).ToList();
Sample project I've uploaded here (I'm using Devart.Data.SQLite.Entity.EF6 5.15.1587){"OUTER APPLY is not supported by SQLite."}
Click FillDatabase button first to create database (on disk D).