【发布时间】:2020-03-26 03:33:29
【问题描述】:
我偶然发现了一段看起来非常重复的代码。不幸的是,我对 LINQ 和 EF 核心不太熟悉,所以我很好奇这是否是获取数据的正确方法。这是代码。它实际上要长得多。为简洁起见,我删除了一些重复的行
var result = base.RepositoryContext.Applicant
.Include(c => c.ApplicantEmail)
.Include(c => c.ApplicantStatus)
.Include(c => c.Profile)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(cp => cp.Type)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(cp => cp.Status)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(cp => cp.AssesmentProgramVerification).ThenInclude(cpv => cpv.Verification)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(cp => cp.CertRecommendation).ThenInclude(cr => cr.Recommendation)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(cp => cp.StatementAssessment).ThenInclude(oa => oa.Coach)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(c => c.StatementAssessment).ThenInclude(a => a.Statement)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(c => c.StatementAssessment).ThenInclude(o => o.Method)
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(c => c.StatementAssessment).ThenInclude(a => a.Status)
.Where(...).ToListAsync();
例如,在它说之后
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(c => c.StatementAssessment).ThenInclude(o => o.Method)
重复
.Include(c => c.Profile).ThenInclude(p => p.AssesmentProgram).ThenInclude(c => c.StatementAssessment).ThenInclude(a => a.Status)
我们真的必须经过一长串 .ThenInclude(s) 才能包含另一个表吗?
【问题讨论】:
-
看起来设计不是最优的。包含表示导航属性。它暗示外键关系。让我猜这是代码第一?包含类似于联接。
-
@JohnPeters 是的,这是代码优先。这是代码优先数据库生成的症状吗?
标签: entity-framework entity-framework-core