两个同名的程序&选择类型,但EF抱怨不兼容的数据阅读器

时间:2013-01-18 13:48:46

标签: entity-framework stored-procedures sql-server-2008-r2

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

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

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

  

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

我正在使用:

  • 实体框架4.2
  • Visual Studio 2010
  • Sql Server 2008 R2

我没有足够的EF内部知识来理解为什么会这样。 我的想法是必须有一些列类型/名称嗅探mecanism,它不会嗅到相同的东西。

编辑1:

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

随时询问更多详情。

1 个答案:

答案 0 :(得分:2)

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

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

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