2

我在两个数据库中有两个相同的程序,我的意思是:

  • 一样的名字
  • 相同的参数名称和类型
  • 以返回相同列类型和名称的选择结束(如果我放一个SELECT ... INTO table它会生成完全相同的表)。

唯一不同的是为最终选择构建 sql 查询的代码。如果我在数据库 1 上使用 EF,它会按预期工作,但如果我在数据库 2 上运行代码,它会以错误结束:

数据读取器与指定的“Ctx.Procedure_Result”不兼容。类型的成员“FooId”在数据读取器中没有同名的对应列。

我正在使用:

  • 实体框架 4.2
  • 视觉工作室 2010
  • Sql Server 2008 R2

我没有足够的 EF 内部知识来理解为什么会发生这种情况。我的想法是必须有一些列类型/名称嗅探机制,它们不会嗅探相同的东西。

编辑1:

该过程不会“返回”表类型,它只是“选择”一些行。此选择结果映射到 EDMX 中的 ComplexType。

随时询问更多细节。

4

1 回答 1

2

我的错,正如我建议的那样,我使用 SQL Server Profiler 跟踪了 EF 查询。

事实上,EF 在一个可选参数中使用了 NULL,它破坏了过程中的 sql 查询('select ...' + NULL => NULL)。

对于 NULL 查询,该过程根本不选择任何列,它会使 EF 数据读取器崩溃。

于 2013-01-21T13:57:57.213 回答