实体框架和存储过程返回临时表的问题

kap*_*mom 3 sql-server entity-framework temp-tables

(免责声明-我不是数据库设计师。我只是可怜的开发人员,必须做这项工作。)

目前有17个表格具有相同的结构-名称,地址,电话号码。

给定一个电话号码,我必须检查任何表中是否有匹配的条目,然后返回该地址。

因此,我创建了一个视图以获取表列表(有一个保存该信息的ref表),然后创建了一个存储过程来

  1. 创建一个临时表,
  2. 使用游标,使用sql串联检查视图中的每个表是否包含电话号码。如果找到一条记录,请将其插入到临时表中。
  3. 返回临时表中的行。

所有这些都可以在直接的T-SQL中运行。

现在,我正在尝试使用Entity Framework 4+来调用存储过程。但是函数导入接口不会生成列。它说返回类型= none,并且LINQ代码期望一个int并且不会编译。

关于如何进行这项工作的任何想法?

我知道,如果绝对有必要,我可以将检查表部分移到代码中,但是我希望上面的方法可以工作。

Lad*_*nka 5

EF获取存储过程信息的默认方式仅要求“元数据”-它不执行查询或数据修改命令。因此,EF无法使用临时表,dynaimc SQL等接收有关存储过程的信息,因为这些信息在真正执行命令之前是未知的。

作为一种解决方法,您可以修改您的过程,并在一开始就

SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)

仅当您尝试将存储过程导入数据库并确保存储过程未在数据库中进行任何修改时才使用此选项,因为每次您尝试在实体模型中导入或更新存储过程时都会执行这些修改。