我一直在寻求一个解决方案了几天,但不能找到一个。
我创建一个存储过程使用全文搜索来搜索一个表。 然后,我将这些存储过程15组合结果存入他们的排名进行排序的列表。
这里是存储过程的代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SpAdvancedSearchICAPUsers]
@searching nvarchar(100) = ''
AS
BEGIN
SET NOCOUNT ON;
Set FMTONLY OFF;
DECLARE @SQLQuery AS NVarchar(max)
IF @searching IS NULL OR @searching = ''
BEGIN
SET @SQLQuery = 'SELECT (all field names listed separated by commas) FROM Users'
END
ELSE
BEGIN
SET @SQLQuery = 'SELECT (all field names listed separated by commas), fts.Rank FROM Users as p JOIN
FREETEXTTABLE(Users, (fields to search for listed separated by commas), @searching)
as fts on p.userID = fts.[KEY] WHERE 1=1'
END
EXEC @SQLQuery
END
我走近这个项目先做模型。 我将自己的存储过程来我的模型通过右击和紧迫: Add New > Function Import...
余设置的功能进口名称,所选择的存储的过程,选择了“返回一个集合的”发送实体:(所需的数据类型的SP返回,在此情况下,用户)。
当我使用存储过程是这样的:
newSearch.Users = db.SpAdvancedSearchICAPUsers(search); //search is a string
newSearch.Users
是IENumerable<Users>
。 它说,返回类型是存储过程的一个int。 我得到以下错误:
无法隐式转换类型“诠释”到“System.Collections.Generic.IEnumerable;
我还试图增加一个参数定义变量作为这样的正下方声明@SQLQuery
这样的:
Declare @ParamDefinition As NVarchar(4000)
然后我将它和尝试,并像这样运行:
Set @ParamDefinition = '@searchingnvarchar(100)'
Exec sp_executesql @SQLQuery, @ParamDefinition, @searching
@searching
是被传递到搜索的字符串。
我甚至已经尝试了所有我的表拖到一个DBML文件,因为我已经成功地在这之前的方式使用存储过程。 当我在SP表中拖我得到这个消息:
UPDATE:埃迪在指定在存储过程中的阻力后DBML,你可以设置的返回类型的意见(我选择的是用户对象类型)。 这工作。 我宁愿不这样做,虽然。 我将它作为一个临时的解决方案,但我有15个存储过程,我不得不这样做对。
有谁知道如何从使用EDMX文件,而不是DBML存储过程的输出是否正确? 当我看看属性后的EDMX并选择“映射详细信息>存储过程/函数”右键点击。 在EDMX返回类型没有任何关系。 它没有下降downlist,什么都没有。