Почему Entity Framework загружает основные отношения сущностей без добавления include? - PullRequest
1 голос
/ 21 октября 2019

Я использую ядро ​​EF в проекте ядра .net. После извлечения данных из контекста ef объекты объекта (один ко многим и т. Д.) Автоматически загружаются.

Вот мой код:

 public TimeSheetActivity Get(int id)
 {
     DataSets.TimeSheetActivity dbActivity = db.TimeSheetActivities
                                               .Include(k => k.ProjectFile)
                                               .Include(k => k.MeasurementUnit)
                                               .Include(k => k.TypeOfWork)
                                               .Include(k => k.TimeSheetProject)
                                               .FirstOrDefault(k => k.ID == id);

     return dbActivity == null ? null : _mapper.Map<TimeSheetActivity>(dbActivity);
 }


public Project GetActivityProject(int id)
{
    //db.SaveChanges();

    TimeSheetActivity activity = Get(id);

    if (activity == null)
    {
        return null;
    }

    var dbTimeSheetProject = db.TimeSheetProjects.First(k => k.ID == activity.TimeSheetProjectId);

    var dbProject = db.Projects.First(k => k.ID == dbTimeSheetProject.ProjectId);
    // PROBLEM HERE >> dbProject is loading all entities related
    return _mapper.Map<Project>(dbProject);
}

Проблема отмечена выше ипрокомментировал в контексте Projects, вот класс проекта:

public class Project
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public DateTime DateAdded { get; set; }

        public int? ParentId { get; set; }
        public int? DepartmentId { get; set; }
        public int? CompanyId { get; set; }


        public virtual Department Department { get; set; }
        public virtual Company Company { get; set; }

        public virtual Project Parent { get; set; }

        public virtual List<Project> Activities { get; set; }
        public virtual List<TimeSheetProject> TimeSheetProjects { get; set; }
        public virtual List<ProjectFile> ProjectFiles { get; set; }

    }

Запись отладки:

Debug

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

Я думаю, что проблема заключается в следующем (выдержка из документации):

Entity Framework Core автоматически исправит свойства навигации для любых других объектов, которые ранее были загружены в экземпляр контекста. Поэтому, даже если вы явно не включаете данные для свойства навигации, свойство все равно может быть заполнено, если ранее были загружены некоторые или все связанные объекты.

https://docs.microsoft.com/en-us/ef/core/querying/related-data#eager-loading

0 голосов
/ 21 октября 2019

Что касается ответа @ cristi71000, так оно и было. мое решение добавляло AsNoTracking() как следующее:

var dbProject = db.Projects.AsNoTracking()...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...