我的MCF服务器应用程序中的一些代码已经运行了好几个月,我遇到了一个奇怪的异常。我正在使用Mindscape Lightspeed 5 ORM,VS2013 / C#和SQL Server 2008R2。
以下是抛出异常的代码:
internal byte EplantId
{
get
{
if (_eplantId == 0)
{
if (UnitOfWork.Factories.Count(f => f.IsDefault) != 1)
{
throw new InvalidOperationException(
"Unable to determine default ePlant. Contact Engineering.");
}
var eplant = UnitOfWork.Factories.FirstOrDefault(f => f.IsDefault);
if (eplant == null)
{
throw new InvalidOperationException(
"Unable to determine default ePlant. Contact Engineering.");
}
_eplantId = eplant.EplantId;
}
return _eplantId;
}
}
当我在调试模式中逐步执行这段代码时,我看到当前执行行从顶部开始并以可预测的方式移动 - if(_eplantId == 0),if if(UnitOfWork ... Count( )) - 然后它跳回到if(eplantId == 0),返回if(UnitOfWork ...),然后抛出异常。
这是在特别毛茸茸的合并(TortoiseHg)之后开始的,需要一些人工干预。但是,合并是与此单独的模块。相同的项目,不同的文件。
我在一个不相关的模块中移动了一些代码并且行为发生了变化。现在它跳过第一个.Count语句并登陆.FirstOrDefault语句,然后返回到顶部并在抛出异常之前重复序列。
我完全被这个难倒了。我甚至不知道如何找到问题的原因或位置。你有什么想法,提示或建议吗?什么可能导致抛出此异常?从Mindscape库中抛出异常,我没有源代码访问权限。我100%肯定图书馆没有错,因为它已经完美地工作了几个月,正如我所说,它仍然在我的默认分支中完美运行。
我强行清除了项目中的所有二进制文件,但没有改变行为。我试过在else语句中移动逻辑的第二位而没有效果。有没有人遇到过这种情况并成功地解决了这个问题?
答案 0 :(得分:0)
事后看来,这里的答案显而易见。从本质上讲,谁给了无花果是什么让代码行为有趣,错误是通过拙劣的合并引入的。
解决方案是退出合并并再次尝试直到它工作。在我的情况下,我不得不手动重建一个源文件,该文件已在不同项目/人员的两个分支上进行了广泛修改。一旦我这样做,一切都按预期工作。