我们有一个EF模型正在使用POCO生成它的类型。我们添加了一个存储过程并为其创建了一个函数导入。然后,我们为结果集生成复杂类型,并让T4模板生成业务合同(POCO)。
在我们的开发,开发和QA环境中,一切都很有效。当我们部署到生产时,应用程序工作了一段时间,然后开始抛出此异常:
System.InvalidOperationException:ExecuteFunction中的类型参数“POCO”与函数返回的类型“EFComplexType”不兼容。
如果我们回收应用程序池,异常就会消失一段时间然后再回来,所以我们再次回收应用程序池,依此类推......
我们无法在除生产之外的任何环境中重现问题,这使得确定根本原因非常困难。
我怀疑是否有人对此有轻蔑的答案,但是对于可能的内容,我们可能想要探索的领域或追踪根本原因的想法都会有所帮助。< / p>
答案 0 :(得分:2)
我们终于找到了导致问题的原因。我们还有另一项使用EF的服务。它使用挂起ObjectContext的ExecuteStoreQuery方法。一旦调用该方法,我们所有其他EF查询就会因上述消息或“不兼容的元数据”消息而失败。我们重写了该查询以使用标准ADO.NET,并且从那时起就没有问题。
答案 1 :(得分:0)
首先是立即检查。 开发和生产之间的过程是否相同?
您使用的是最新版本的POCO T4模板,我之前发现了一些错误。
Dev to Deploy场景在EF中大量增加。首先要检查的是:Dev Environment是SQL 2008,生产是SQL 2005.EF真的很麻烦。您需要在正在使用的数据库版本上生成模型。从那开始。
回收应用程序池有帮助的事实可能指向某种形式的缓存或上下文保留。检查请求之间的对象范围是否存在。如果你在某处运行单例模式,这是一个主要的嫌疑人。
你是否动态加载程序集?
是否可以从datacontext发布生成的函数调用代码?