【发布时间】:2020-09-08 03:00:15
【问题描述】:
我花了几个小时试图弄清楚如何将全文搜索合并到 Entity Framework Core 中。
我已经放弃尝试直接合并全文查询。于是我硬着头皮加了两个存储过程。
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql(@"CREATE PROCEDURE [dbo].[GetFullTextSearchResults]
@SearchTerm nvarchar(4000),
@SkipRows int,
@TakeRows int
AS
BEGIN
SET NOCOUNT ON;
SELECT [Articles].[Id],
[Articles].[Title],
[Articles].[Slug],
[Articles].[Description],
[Categories].[Title] AS [Category],
[Articles].[UserId],
[AspNetUsers].[Name] AS [UserName],
[Articles].[UtcDateModified]
FROM [Articles]
INNER JOIN CONTAINSTABLE([Articles], *, @SearchTerm) [t] ON [Articles].[Id] = [t].[Key]
INNER JOIN [Subcategories] ON [Subcategories].[Id] = [Articles].[SubcategoryId]
INNER JOIN [Categories] ON [Categories].[Id] = [Subcategories].[CategoryId]
LEFT OUTER JOIN [AspNetUsers] ON [AspNetUsers].[Id] = [Articles].[UserId]
WHERE [Articles].[Approved] = 1
ORDER BY [t].[Rank] DESC
OFFSET @SkipRows ROWS
FETCH NEXT @TakeRows ROWS ONLY;
END");
migrationBuilder.Sql(@"CREATE PROCEDURE [dbo].[GetFullTextSearchCount]
@SearchTerm nvarchar(4000)
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(1)
FROM [Articles]
INNER JOIN CONTAINSTABLE([Articles], *, @SearchTerm) [t] ON [Articles].[Id] = [t].[Key]
WHERE [Articles].[Approved] = 1
END");
但是,我似乎仍然无法合并它,因为返回的列与我的视图模型之一匹配,但与我的实体模型不匹配。我已经阅读了一个限制,即 Entity Framework Core 只能检索作为模型一部分的实体类型。 (我需要一些相关数据,下载整个实体模型会包含太多数据。)
我不知道为什么这会变得如此复杂。但在这一点上,如果我能做一个 ADO.NET 类型的查询,我会接受的。
那么,如何从GetFullTextSearchResults 检索结果?还有其他选择吗?
【问题讨论】:
标签: c# sql-server asp.net-core entity-framework-core full-text-search