实体框架代码首先使用存储过程进行伪索引?

时间:2011-10-11 20:45:05

标签: entity-framework entity-framework-4.1

在我们完全弄清楚我们的全文搜索策略之前,我们已经提出了一个合理的解决方案,向我们的业主展示功能如何运作。话虽如此,我们正在使用Entity Framework 4.1和代码第一种方法。我们已经创建了一个存储过程来以标准格式提取结果。以下是搜索结果类的示例:

public class SearchResult
{
     public Guid EntityId {get;set;}
     public string DisplayText {get;set;}
     public string Icon {get;set;}

}

现在,没有任何数据可以进入SearchResults的表格。我们的想法是搜索多个实体并使用该结构构建结果。 SP看起来与此相似:

CREATE PROCEDURE dbo.Search(
@term varchar(200),
@topSelect int = 5,
@isPrefix BIT = 0,

)
AS
BEGIN
  Declare @SearchTerm varchar(250)
    If (isNull(@isPrefix,0) = 0)
        begin  
            Set @SearchTerm = '%' + @term + '%'
        end
    Else
        begin
            Set @SearchTerm = @term + '%'
        end

select top (@topSelect) 'Project' as 'Controller',
       [Id],
       Name as 'DisplayText',
       'PROJECTICON'       as Icon
from Projects
where Name like @SearchTerm
UNION
select top (@topSelect) 'Rfi' as 'Controller',
       [Id],
       [Number] + ' - ' + [Number] as 'DisplayText',
       'RFIICON'       as Icon
from Rfis
where (Subject like @SearchTerm or
      Description like @SearchTerm or
      Number like @SearchTerm)
End

我是否可以使用EF调用存储过程并使用SP的结果填充SearchResult“实体”,或者我是否需要在没有EF的情况下执行此操作?

这个想法与使用索引相同,但我们正在搜索实时数据。同样,这是我们需求的临时解决方案,直到我们充实了我们想要使用的FTS解决方案。

更新

经过一番研究后,我认为这可能是行为......我会报告回来。

1 个答案:

答案 0 :(得分:0)

只要您拥有与实体中相同的列名,一切都只能映射超级!有关在EF中使用SP的详细信息,请Check this out。要记住的一件事是,如果您遇到此错误:“SqlParameter已包含在另一个SqlParameterCollection中”,请确保在集合上使用类似ToList()的内容,否则如果您尝试使用查询将尝试再次运行它。至少,这是我在申请中找到的。