Ali*_*eit 3 c# linq entity-framework entity-framework-core asp.net-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);
}
Run Code Online (Sandbox Code Playgroud)
问题在上面标记并在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; }
}
Run Code Online (Sandbox Code Playgroud)
调试捕获:
我认为问题是这样的(摘自文档):
Entity Framework Core 将自动修复之前加载到上下文实例中的任何其他实体的导航属性。因此,即使您没有明确包含导航属性的数据,如果之前加载了部分或全部相关实体,该属性仍可能会被填充。
https://docs.microsoft.com/en-us/ef/core/querying/related-data#eager-loading