我正在使用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克服这个障碍吗?
答案 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时,它无法计算列的返回集,即使选择列表在我的示例中是相对静态的。