11

Giờ đây, SQL Server 2008 đã tích hợp tìm kiếm văn bản đầy đủ. Tôi đang tìm cách sử dụng nó để tìm kiếm trang web của tôi. Tôi cũng đang xem xét việc sử dụng khung thực thể ADO.NET cho ORM của tôi nhưng tôi đã tự hỏi làm thế nào để bạn thực hiện tìm kiếm toàn văn bản (FTS) với khung công tác LINQ đến ADO.NET?Làm thế nào để bạn thực hiện tìm kiếm văn bản đầy đủ (FTS) với khung thực thể LINQ đến ADO.NET?

Có hỗ trợ nào trong khung thực thể ADO.NET hay tôi bị kẹt bằng cách sử dụng method of creating a function which uses the full text search predicates?

+0

Bạn đang sử dụng EF 4 trở xuống? –

Trả lời

12

Khuôn khổ thực thể chỉ hỗ trợ một tập con của chức năng sql có sẵn (một phần vẫn tương thích với nhiều nhà cung cấp). Tuy nhiên, ngay cả LINQ-to-SQL (hỗ trợ nhiều cấu trúc SQL-Server cụ thể hơn, chẳng hạn như UDF) không hỗ trợ AFAIK toàn văn.

Tôi tin rằng bạn cần sử dụng thủ tục/udf được lưu trữ. Cách tiếp cận UDF được ưa thích, vì lớp siêu dữ liệu mạnh hơn nhiều và nó có thể được tổng hợp tại máy chủ db - tuy nhiên, Entity Framework không (hoặc không, lần cuối tôi kiểm tra) như UDF ;-p Vì vậy, bạn có thể có để sử dụng thủ tục được lưu trữ.

+0

Trong ngữ cảnh của câu trả lời ở trên, điều này cũng có thể hữu ích: http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql- expressions.aspx –

+0

@Marc, bất kỳ cơ hội nào sau tất cả những năm này mà bạn nhớ phương pháp UDF đòi hỏi phải làm gì? (Trên thực tế, không bao giờ, tôi thấy một số ví dụ khi sử dụng CONTAINSTABLE) –

10

Tôi đã nhìn thấy mã như thế này cho EF4:

var query = context.ExecuteStoreQuery<Person>(
     "SELECT * FROM People WHERE FREETEXT(*,{0})", 
     searchText 
    ).AsQueryable(); 

Điều này có thể đơn giản hơn vì tạo ra một proc lưu trữ hoặc UDP trong một số trường hợp.

+0

Điều này không dễ bị tấn công SQL injection? – stefann

+0

@stefann, đó là sự hiểu biết của tôi rằng EF phân tích cú pháp này và bảo vệ chống lại các cuộc tấn công như vậy. –

+1

EF sẽ không bắt bất kỳ tiêm sql nào trong ví dụ cụ thể đó. Nó sẽ tạo ra điều đó như là một truy vấn SQL được tham số hóa, trong đó có sự bảo vệ vốn có đối với việc tiêm SQL. Nếu bạn đã ghép chuỗi văn bản tìm kiếm đó vào chuỗi thực, thì EF sẽ phân tích cú pháp đó và sẽ bắt được một số (không phải tất cả). Nó sẽ bắt những thứ gây rối nhất như "xóa khỏi ..." vì điều đó sẽ không phân tích chính xác. –

Các vấn đề liên quan