使用实体框架执行联接时出现NullReferenceException,但仅在部署时出现

本文关键字:部署 NullReferenceException 执行 实体 框架 | 更新日期: 2023-09-27 18:27:24

我今天遇到了我遇到过的最糟糕的问题。当我部署WCF服务时,它会在尝试执行联接时抛出并记录一个NullReferenceException。加入的代码是:

var myInfo = __myContext.Dates
    .Join(_myContext.Times, d => d.SomeID, t => t.SomeID, (d, t) => new { d, t })
    .Where(c => c.d.DateType == "Date of Birth")
    .ToList();

由于代码是远程运行的,我无法计算出什么是null。我将它部署到Edge环境中进行测试,但也遇到了同样的问题。工作中的扳手如下:

  • 在我的本地机器上运行良好
  • 当我将webconfig设置为使用Edge数据库时,在本地计算机上运行良好。(我真的以为这会让我解决问题)
  • SQL事件探查器显示了一个标准的SQL查询联接查询(没有什么异常),当它独立运行时,它会毫无问题地执行

我完全被难住了,我正在寻找调试建议,就像其他任何事情一样。除了在远程服务器上安装Visual Studio,我还能做什么?

我知道有一种叫做intelltrace的东西我可能可以使用,但没有很好的教程来解释这是否有帮助或如何使其工作(MSDN页面非常糟糕)。

在这一点上,任何建议都是受欢迎的。谢谢

更多信息:

当它撤回某些实体时,似乎出现了错误,例如:

var myobjects = _context.SomeTable.ToList();可能出错,而var myobjects = _context.SomeTable.Select(c => new { ....... }.ToList();工作正常。我仍然无法解释为什么它只会在远程服务器上执行此操作,而在本地,即使连接到远程数据库,它也不会。

使用实体框架执行联接时出现NullReferenceException,但仅在部署时出现

我看到了一个类似的问题,修复方法是在调用之前简单地将ProxyCreationEnabled设置为false:

 _context.Configuration.ProxyCreationEnabled = false;
 var myInfo = __myContext.Dates
    .Join(_myContext.Times, d => d.SomeID, t => t.SomeID, (d, t) => new { d, t })
    .Where(c => c.d.DateType == "Date of Birth")
    .ToList();

请注意,在我的案例中,我能够确定抛出错误的实际上不是查询本身,而是在尝试通过WCF将结果传递给客户端时。