如何让Entity Framework识别动态存储过程中的列

时间:2011-05-10 13:09:53

标签: sql sql-server sql-server-2005 entity-framework entity-framework-4

我正在使用Entity Framework 4,我们的模型中有一堆存储过程。目前,我们可以做我们需要的一切。但是我们有一个新的过程,它接受一个字符串,并最终执行诸如

之类的操作
Create Procedure usp_RunSearch
  @searchTerm VARCHAR(2000)
AS
BEGIN
  DECLARE @sql VARCHAR(4000)
  SET @sql = '
  SELECT ID,
         NAME
  FROM   Users'

  IF(ISNULL(@searchTerm, '') != '')
  BEGIN
    SET @sql = @sql + 'WHERE ' + @searchTerm
  END

  Exec (@sql)
END

返回结果集。

EF似乎无法查询此过程以获取结果列列表。

我能做些什么来帮助EF克服这个障碍吗?

2 个答案:

答案 0 :(得分:0)

如果您只是想使用它,您可以这样做。 检查此链接。 http://blogs.msdn.com/b/adonet/archive/2011/02/04/using-dbcontext-in-ef-feature-ctp5-part-10-raw-sql-queries.aspx

顺便说一句,尝试添加存储过程参数的默认值,这也可能有效。

Create Procedure usp_RunSearch
  @searchTerm VARCHAR(2000) = ''
AS

答案 1 :(得分:0)

最后,我在EDMX中手动创建了一个ComplexType,并为存储过程设置了函数import,以使用这个手动定义的复杂类型。我认为当EF检查sproc时,它无法计算列的返回集,即使选择列表在我的示例中是相对静态的。