Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 两个同名程序&;选择类型,但EF抱怨数据读取器不兼容_Entity Framework_Stored Procedures_Sql Server 2008 R2 - Fatal编程技术网

Entity framework 两个同名程序&;选择类型,但EF抱怨数据读取器不兼容

Entity framework 两个同名程序&;选择类型,但EF抱怨数据读取器不兼容,entity-framework,stored-procedures,sql-server-2008-r2,Entity Framework,Stored Procedures,Sql Server 2008 R2,我在两个DB中有两个相同的程序,我的意思是: 同名 相同的参数名称和类型 以返回相同列类型和名称的select结束(如果我将select…放入表中它将生成完全相同的表) 唯一不同的是为最终选择构建sql查询的代码。 如果我在数据库1上使用EF,它将按预期工作,但如果我在数据库2上运行代码,它将以错误结束: 数据读取器与指定的“Ctx.Procedure\u Result”不兼容。“FooId”类型的成员在数据读取器中没有同名的对应列 我正在使用: 实体框架4.2 VisualStudio2

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

  • 同名
  • 相同的参数名称和类型
  • 以返回相同列类型和名称的select结束(如果我将
    select…放入表中
    它将生成完全相同的表)
唯一不同的是为最终选择构建sql查询的代码。 如果我在数据库1上使用EF,它将按预期工作,但如果我在数据库2上运行代码,它将以错误结束:

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

我正在使用:

  • 实体框架4.2
  • VisualStudio2010
  • Sql Server 2008 R2
我没有足够的EF内部知识来理解为什么会发生这种情况。 我的想法是,一定有一些列类型/名称嗅探mecanism,但它嗅探不到相同的东西

编辑1:

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


请随意询问更多详细信息。

我的错,因为我建议使用SQL Server Profiler跟踪EF查询

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


如果查询为空,则过程根本不选择任何列,从而导致EF数据读取器崩溃。

是否发布相关代码部分?还有查询和表?在所选记录集中有
FooId
列-正如您在异常中看到的,这是缺少的列。如果存储过程中有一些逻辑,则可能发生的另一件事是,可能不会返回任何结果(与空记录集相反),这意味着您根本没有列。使用Sql Profiler跟踪EF发送到“不工作”数据库的查询,手动运行查询并查看结果。我感觉两个数据库中的数据不同,因此存储过程的行为也不同。好吧,伙计们,这是我的错,我建议使用SQL Server Profiler跟踪EF查询。事实上,EF在一个参数中使用NULL,该参数破坏了过程中的sql查询('select…'+NULL=>NULL)