2012-12-19 54 views
0

我有以下存储过程:存储过程返回没有列

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[SearchMediaTitles] 

    @query varchar(50), 
    @limit int = 6, 
    @userId int 
AS 
SET FMTONLY OFF 
BEGIN 

declare @searchString varchar(52) 

set @searchString = '"' + @query +'*"' 
IF @userId!=NULL 
SELECT TOP (@limit) ID, Title from Media where CONTAINS([Title], @searchString) 
AND ID IN 
    (
    SELECT FavoriteMedia_ID 
    FROM dbo.UserMedia 
    WHERE [email protected] 
) 
ELSE 
SELECT TOP (@limit) ID, Title from Media where CONTAINS([Title], @searchString) 

END 

在实体框架,当我尝试它在功能导入它说

选定存储映射的复杂类型程序返回没有列

我已阅读关于此在互联网上,我发现我需要设置SET FMTONLY OFF,但正如你所看到的那样没有奏效。

任何想法?

编辑

我已经改变了SELECT*并返回一个空的结果。我认为这是关系到上述

+2

位A bodge的,但如果你只是临时更改定义什么'SELECT ID,从Media'标题所以它是一个简单的直线前进,没有条件逻辑PROC然后进行实体框架映射,然后把你原来的代码早在两条路径看起来像他们将返回该形状的结果集。 –

+0

我想这一点,但它不工作 – Kosmog

+1

你摆脱'SET FMTONLY'声明?这是什么特定于该存储过程还是你得到这个所有存储过程? –

回答

3

大家谁都有同样的问题,这是我做了什么。

首先我修改存储过程以一个简单的一个是这样的:

SELECT [column1],[column2] FROM [table] 

我进口它在Entity Framework,创建了复杂类型和映射属性

然后,我改变回来,并更新所述模型现在它可以工作。 我认为Entity Framework有一些复杂的存储过程的问题。从我读的它不能得到动态存储过程或使用temp tables的存储过程的结果。

PS:当我用Ajax调用它,我把它用data.column1 and data.column2。如果我使用data.value' it returns未定义`。

这是有点奇怪。

编辑:这就像马丁说,但我不知道它为什么没有奏效!谢谢btw!

1

我猜你缺少你的prefix_term单引号说明问题。 所以这个:

set @searchString = '"' + @query +'*"' 

应该是:

set @searchString = CHAR(39) + '"' + @query +'*"' + CHAR(39) 
+0

我正在使用全文搜索,它不起作用 – Kosmog