2017-07-23 16 views
6

gì là cách tốt nhất để sử dụng tìm kiếm toàn văn với EFCoreFull-Text Search với Entity Framework Lõi

Đối với tôi bây giờ có hai cách tiếp cận

Approach # 1

var entities = this.DbContext.Example 
      .FromSql("fullText_Proc {0}, {1}", searchTermParameter, topParameter); 

     return entities.AsNoTracking().ToList(); 

Ở đây tôi buộc phải tạo một proc vì FromSql bỏ qua mệnh đề WHERE.

Approach # 1

Tạo một lệnh và thực hiện lập bản đồ bằng tay

using (var command = this.DbContext.Database.GetDbConnection().CreateCommand()) 
    { 
     command.CommandText = "SELECT ... WHERE CONTAINS("Name", @p1)"; 
     command.CommandType = CommandType.Text; 
     var parameter = new SqlParameter("@p1",...); 

     this.DbContext.Database.OpenConnection(); 

     using (var result = command.ExecuteReader()) 
     { 
      while (result.Read()) 
      { 
       .... // Map entity 
      } 
     } 
    } 
+0

Tôi đã sử dụng phương pháp thứ hai của bạn để tìm nạp kết quả được xếp hạng với CONTAINSTABLE không thể đạt được bằng cách sử dụng FromSql cho thời điểm này. Cảm ơn. – c0y0teX

Trả lời

3

mệnh đề WHERE đang làm việc với FromSql, trên thực tế. Tôi đã dành đủ thời gian để nhận ra sự cố đã chuyển thông số.

Đây là cách tôi đã giải quyết được sự cố.

public IList<Example> QueryPhrase(string phrase) 
    { 
     phrase = $"FORMSOF(FREETEXT, \"{phrase}\")"; 

     var query = _dataContext.Example 
      .FromSql(@"SELECT [Id] 
         ,[Sentence]       
        FROM [dbo].[Example] 
        WHERE CONTAINS(Sentence, @p0)", phrase) 
      .AsNoTracking(); 

     return query.ToList(); 
    } 
+1

Làm cách nào để bạn xác định chỉ mục toàn văn trên cột "Câu" của thực thể "Ví dụ" với Entity Framework Core? Tôi đang cố gắng làm một cái gì đó tương tự nhưng tôi cần chỉ mục toàn văn được xác định để mã hoạt động. – VMh

+1

Tôi cũng đang cố gắng làm giống như @VMh, cũng muốn biết! –

+0

Bạn không làm điều đó với EF Core. Nó sẽ được tạo ra trên máy chủ Sql lúc đầu tiên sau đó bạn có thể truy vấn bằng cách sử dụng Chứa. – mehmetilker