枚举QueryOperationResponse时发生InvalidCastException

时间:2018-12-03 20:38:47

标签: c# sql-server wcf

我们上周在出于内部目的开发新项目时遇到了一个奇怪的问题。我们正在Azure SQL数据库上使用存储过程来获取一些数据。然后是实体框架,将数据库映射到数据服务上下文模型。然后将其公开为OData服务,样板等,等等。

我们从客户那里得到如下结果:

OurDataServiceContext.Execute<OurResultsModel>(oDataQueryUri, "GET", false);

这里没什么特别的或有趣的。实际上,可以在我们项目的其他地方找到相同的代码。但是,在这种情况下,每当枚举QueryOperationResponse的结果时,都会发生异常。

 System.InvalidCastException: 'Unable to cast object of type 'System.String' to type 'OurResultsModel'

这完全让我自己和团队的其他两名成员感到沮丧。请记住,存储过程似乎没有什么问题:我们可以执行该存储过程并获得预期的结果。 OData服务本身似乎也没有出错:提琴手查询,在浏览器查询中,没问题! 最终,我创建了一个新类'OurResultsModel2',然后:

    OurDataServiceContext.IgnoreMissingProperties = true;
    OurDataServiceContext.Execute<OurResultsModel2>(oDataQueryUri, "GET", false); 

我打算删除属性,直到它起作用为止。幸运的是,我能够在第一次尝试时枚举结果。我还能够使用这种类型复制InvalidCastException。所以,这是我的问题:什么?我到底做了什么来解决这个问题?

更多细节...

我们的存储过程看起来像这样...

SELECT mt.ID AS ID, mc.Qty AS MorningCount, 
[...another couple of nullable int columns, and a descriptive string...] 
FROM [...a derived table grouped by mt.ID...]

我们将“ mt.ID AS ID”更改为“ mt.ID AS MealID”,一切正常。那么,又怎样呢?我似乎找不到与WCF,OData或EntityFramework相关的任何规则,说“不要命名存储过程ID的列”。我找不到任何记录在案的规则,或者在这里或任何其他论坛上都找不到类似的问题。因此,可能有些误解。而且肯定有一些我不知道的东西。

希望有人可以帮我解决这个问题!

0 个答案:

没有答案