我的应用程序中有以下查询:
var Company = Db.Company.SingleOrDefault(si => si.Guid == companyId);
var items = Db.Programs.Where(w => w.SubCompanyId == Company.CompanyId)
.GroupBy(g => g.Projects).Include(i => i.Key.ProjectLeader);
if (skip.HasValue && take.HasValue)
{
items = items.OrderByDescending(o => o.Key.DatumAanmaak).Skip(skip.Value).Take(take.Value);
}
var materialized = items.ToList();
return materialized.Select(s => new Models.Project()
{
Guid = s.Key.Guid,
ProjectId = s.Key.Id,
Title = s.Key.Titel,
CompanyId= s.Key.CompanyId,
ProjectLeaderFk = s.Key.ProjectLeaderId,
ProjectLeaderName = s.Key.ProjectLeader.FullName,
IsIncoming = s.Key.IsIncoming ?? true,
ProgramCount = s.Count(w => w.TargetCompanyId == Company.CompanyId),
ApplicationAmount = s.Where(w => w.TargetCompanyId == Company.CompanyId).Sum(su => su.ApplicationAmount ),
AvailableAmount = s.Where(w => w.TargetCompanyId == Company.CompanyId).Sum(su => su.AvailableAmount)
}).ToList();
由于我的项目首先是代码,因此会出现以下错误:
System.InvalidOperationException:'为警告'Microsoft.EntityFrameworkCore.Infrastructure.DetachedLazyLoadingWarning生成的错误:尝试对类型为'ProjectProxy'的分离实体延迟加载导航属性'ProjectLeider'。分离的实体或使用'AsNoTracking()'加载的实体不支持延迟加载。通过将事件ID'CoreEventId.DetachedLazyLoadingWarning'传递到'DbContext.OnConfiguring'或'AddDbContext'中的'ConfigureWarnings'方法,可以抑制或记录该异常。
究竟是什么导致此错误?我没有使用AsNoTracking,而是在查询中包含了导致错误的表格。解决此问题的最简单方法是什么?
答案 0 :(得分:2)
究竟是什么导致此错误?我没有使用AsNoTracking,而是在查询中包含了导致错误的表格。
您的查询属于Ignored Includes类别:
如果更改查询以使其不再返回查询开始的实体类型的实例,则将忽略include运算符。
getDatafunction <- function(){
datapath = "D:\\example"
files <- dir(datapath)
for (i in 1:length(files)) {
assign(paste("data",i, sep="_"), read.csv(paste(datapath,files[i], sep="\\"), header=FALSE))
}
return(data)
}
运算符正在将查询开头的实体类型(GroupBy
)更改为其他类型,因此Program
无效(被忽略)。
解决该问题的最简单方法可能是直接从可查询源(.Include(i => i.Key.ProjectLeader)
)中删除实现和项目(Select
),例如
items
答案 1 :(得分:1)
以下内容为我解决了此问题:(使用ThenInclude代替Include)
var items = Dbc.SubSubsidieProgrammas.Include(i => i.Project).ThenInclude(i => i.ProjectLeider).Where(w => w.TargetCompanyId == bedrijf.BedrijfPk).GroupBy(g => g.Project);