@manst
.net

Как оптимизация запроса Entity Framework?

Добрый день, работаю с Entity Framework 6 и Asp.net MVC5, есть три сущности: компания, филиал и пользователь.
public class Company
    {
        public int Id { get; set; }
        public string Name { get; set; }

        
        public virtual ICollection<Branch> Branches { get; set; }

    }

    public class Branch
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int CompanyId { get; set; }
        
        public virtual Company Company { get; set; }
        public virtual ICollection<User> Users { get; set; }


    }

    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int BranchId { get; set; }
        
        public virtual Branch Branch { get; set; }
    }

В коде контроллера мне нужно получить сущность пользователя с информацией по филиалу, которому он принадлежит и компании.
Делаю я это так:
var user = UserManage.Users.Include(b=>b.Branch.Company).FirstOrDefault(u=>u.Id == id);

Далее передаю пользователя в представление. И каждый раз как я в представлении обращаюсь к информации по филиалу или компании , например так:
@Model.Branch.Company.Name
происходит запрос к БД.

Как можно оптимизировать запрос, что бы в контроллере user получал всю информацию сразу и при обращении из представления, не формировались дополнительные запросы?

И вообще, рационален ли такой запрос:
var user = UserManage.Users.Include(b=>b.Branch.Company).FirstOrDefault(u=>u.Id == id);

так как sql код, который формирует EF просто пугает :)

Есть ли смысл разбивать его на несколько простых запросов, например получая сначала пользователя, потом его филиал, а дальше его компанию?

Может есть более простой способ получить от пользователя данные его компании?
  • Вопрос задан
  • 2765 просмотров
Пригласить эксперта
Ответы на вопрос 1
wkololo_4ever
@wkololo_4ever
"Далее передаю пользователя в представление. И каждый раз как я в представлении обращаюсь к информации по филиалу или компании , например так:
@Model.Branch.Company.Name
происходит запрос к БД. "
var user = UserManage.Users.Include(b=>b.Branch.Company).FirstOrDefault(u=>u.Id == id).ToList();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы