模型优先 - 存储过程全文检索 - 返回的不是List智力/ IEnumerable的(Model

2019-09-28 14:16发布

我一直在寻求一个解决方案了几天,但不能找到一个。

我创建一个存储过程使用全文搜索来搜索一个表。 然后,我将这些存储过程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.UsersIENumerable<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,什么都没有。

Answer 1:

我不知道如果我在这里打了点,但如果你正在做的事情一样

  newSearch.Users = db.SpAdvancedSearchICAPUsers(搜索); 
  newSearch.Users 
类型是用户实体的,那么也许写的搜索语句

    Set @SQLQuery = 'SELECT p.* 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
                     ORDER BY fts.[Rank]'

将工作简单的事实,它返回用户实体预计领域(即:无等级字段)。

为了更好地诊断是否属于这种情况下与否,问题变成:

做了同样的问题,当你发送一个空搜索领域发生的呢?

即:

newSearch.Users = db.SpAdvancedSearchICAPUsers('');

如果它的工作原理对于后一种情况,那么也许上述变化会做。

请告诉我。



文章来源: Model First - Full Text Search Stored Procedure - Returns Int instead of List/IENumerable