我已经构建了一个非常extenxive EF查询,结果是错误的。在哪里和为什么似乎无法追查,因为我的内隐感觉只是返回null。我希望有人能够指引我正确的方向。我用this open on my second monitor.EF包含查询结果有问题,内部异常为空
var databaseRequirementVersions = context.RequirementVersions
.Include(x => x.Requirement)
.Include(x => x.RequirementDetails)
.Include(x => x.TaggedValueRequirementCouplers)
.Include(x => x.TaggedValueRequirementCouplers.Select(y => y.TaggedValueVersion))
.Include(x => x.TaggedValueRequirementCouplers.Select(y => y.TaggedValueVersion.TaggedValue))
.Include(x => x.ConnectorRequirementCouplers)
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.Connector))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.ConnectorDetails))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.TaggedValueConnectorCouplers))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.TaggedValueConnectorCouplers.Select(a => a.TaggedValueVersion)))
.Include(x => x.ConnectorRequirementCouplers.Select(y => y.ConnectorVersion.TaggedValueConnectorCouplers.Select(a => a.TaggedValueVersion.TaggedValue)))
.Where(x => x.Requirement.Guid == element.ElementGUID);
快速破坏了数据库;
RequirementVersions总是具有1项要求(要求可以有多个版本)
RequirementVersions总是具有1个RequirementDetails
RequirementVersions具有多个TaggedValueRequirementCouplers(耦合器表)
RequirementTaggedValueVersion具有多个TaggedValueRequirementCouplers(耦合器表)
RequirementTaggedValueVersion总是具有1个RequirementTaggedValue (RequirementTaggedValue可以有多个版本)
RequirementVersions有多个ConnectorRequirementCouplers(耦合器表)
Connecto rVersion具有多个ConnectorRequirementCouplers(耦合器表)
ConnectorVersion总是具有1连接器(连接器可以具有多个版本)
ConnectorVersion总是具有1个ConnectorDetails
ConnectorVersion具有多个ConnectorTaggedValueCouplers(耦合器表)
ConnectorTaggedValueVersion具有多个ConnectorTaggedValueCouplers(联接器的表)
ConnectorTaggedValueVersion具有1个ConnectorTaggedValue(ConnectorTaggedValue可以有多个ConnectorTaggedValueVersions)
例外: 堆栈跟踪从MoreLinq MaxBy<>
开始,它位于包含语句下方,它尝试发出以下代码行;
var MyList = new List<RequirementVersion>();
MyList.Add(databaseRequirementVersions?.MaxBy(x => x.Version));
我已经做了什么来得出结论我的.Include
是坏的;
当我注释掉(//
)所有.Include
的比第2层(所以任何打算过去y.
- 这意味着y.ConnectorVersion
的作品,但y.ConnectorVersion.Connector
,或(假设)y.ConnectorVersion.Select(z => z.Connector)
不工作)不断深入查询被接受。
正如我似乎无法通过自己与可用的工具来算出这个一出来,我希望有人能指出我在正确的方向..
编辑: @Evk要我改变MaxBy<>
-statement以确保它不会导致问题本身,所以这里是新的(相同的?)异常;
什么烂摊子。完成恶梦维护和调试。 –
从简单检查开始:启用数据库日志(context.Database.Log = Console.WriteLine或其他)。去掉 ”?”这里>“databaseRequirementVersions?”。用FirstOrDefault()替换MaxBy。 – Evk
另请检查InnerException。这是什么意思 –