EF include-query结果有问题,内部异常为null

时间:2016-11-14 15:17:18

标签: c# mysql entity-framework

我已经建立了一个相当棘手的EF查询,结果证明是错误的。在哪里以及为什么似乎无法追踪,因为我的innerexception只返回null。我希望有人能指出我正确的方向。我使用this open on my second monitor.

构建了查询
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(耦合器表)
ConnectorVersion有多个ConnectorRequirementCouplers(耦合器表)
ConnectorVersion总是有1个连接器(连接器可以有多个版本)
ConnectorVersion总是有1个ConnectorDetails
ConnectorVersion有多个ConnectorTaggedValueCouplers(耦合器表)
ConnectorTaggedValueVersion有多个ConnectorTaggedValueCouplers(耦合器表)
ConnectorTaggedValueVersion有1个ConnectorTaggedValue(ConnectorTaggedValue可以有多个ConnectorTaggedValueVersions)

例外: enter image description here 堆栈跟踪从MoreLinq MaxBy<>开始,当它位于include语句的下方时,它尝试发出以下代码行;

var MyList = new List<RequirementVersion>();
MyList.Add(databaseRequirementVersions?.MaxBy(x => x.Version));

我做了什么来得出结论我的.Include被打破了;
当我评论(//)时,所有.Include都比第二层更深(所以任何事情都会超过y. - 意味着y.ConnectorVersion有效,但是{{ 1}},或(假设)y.ConnectorVersion.Connector不起作用)查询被接受。

由于我似乎无法用自己可用的工具来解决这个问题,所以我希望有人能指出我正确的方向..

编辑: @Evk希望我更改y.ConnectorVersion.Select(z => z.Connector) - 语句以确保它不会导致问题本身,所以这里是新的(相同的?)异常; enter image description here

1 个答案:

答案 0 :(得分:0)

所以我做了什么来得到答案;
通过在我的DbContext构造函数中包含以下代码行;

var logPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Folder\DatabaseLog.log");
this.DbContext.Database.Log = (s) => File.AppendAllText(logPath, s);

我设法创建了一个关于数据库通信发生的相当广泛的日志。它显示了错误发生的位置和原因。实际错误在答案方面没有太大差异(列/表引用中的拼写错误),但是日志记录在查找时发挥了巨大作用;

非常感谢@Evk提供的日志记录建议