c# - 为什么 Entity Framework 核心加载实体的关系而不添加包含

标签 c# entity-framework linq asp.net-core entity-framework-core

我在 .net 核心项目中使用 EF 核心。从 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

最佳答案

我认为问题是这样的(摘自文档):

Entity Framework Core will automatically fix-up navigation properties to any other entities that were previously loaded into the context instance. So even if you don't explicitly include the data for a navigation property, the property may still be populated if some or all of the related entities were previously loaded.

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

关于c# - 为什么 Entity Framework 核心加载实体的关系而不添加包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481033/

相关文章:

c# - 放大显示时图表不缩放

linq-to-sql - 鉴于LINQ to Entities不支持 "Custom methods",您如何保持DRY?

c# - Linq比较可为空的字符串到字符串

entity-framework - 自数据库创建以来,支持 'DataContext' 上下文的模型已更改

asp.net-mvc - 自动更新 Entity Framework 模型

c# - 如何使用linq将excel文件上传到数据库?

c# - Linq Distinct 没有带回正确的结果

javascript - 从 ASPX CodeBehind 执行 JS 代码

c# - 通过 lambda 从列表 <> 中删除重复值的最快方法

c# - 如何在 C# 中制作音频流? (一般的)