11

Teraz, gdy SQL Server 2008 ma wbudowane wyszukiwanie pełnotekstowe. Zamierzam użyć go do zasilania wyszukiwania w mojej witrynie. Patrzę również na wykorzystanie struktury podmiotu ADO.NET dla mojego ORM, ale zastanawiałem się, jak zrobić pełne przeszukiwanie tekstu (FTS) z Linq do struktury podmiotu ADO.NET?Jak wykonać wyszukiwanie pełnotekstowe (FTS) za pomocą Linq do struktury encji ADO.NET?

Czy istnieje wsparcie w strukturze podmiotu ADO.NET lub utknąłem przy użyciu method of creating a function which uses the full text search predicates?

+0

Czy używasz EF 4 lub wcześniejszego? –

Odpowiedz

12

Entity Framework obsługuje tylko podzbiór funkcjonalności sql (częściowo w celu zachowania kompatybilności z szeregiem dostawców). Jednak nawet LINQ-SQL (który obsługuje znacznie więcej konstrukcji specyficznych dla SQL-Server, takich jak UDF) nie obsługuje pełnotekstowego AFAIK.

Uważam, że należy użyć procedura składowana/udf. Podejście UDF jest preferowane, ponieważ warstwa metadanych jest znacznie silniejsza i można ją komponować na serwerze db - jednak Entity Framework nie (lub nie, ostatni raz sprawdzałem), jak UDF ;-p Więc możesz mieć używać procedury składowanej.

+0

W kontekście powyższej odpowiedzi może to również pomóc: http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql- expressions.aspx –

+0

@Marc, jakakolwiek szansa po tylu latach, że pamiętasz, co oznacza podejście UDF? (Właściwie, nieważne, widzę kilka przykładów przy użyciu CONTAINSTABLE) –

10

Widziałem kodu podobnego do EF4:

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

To może być prostsze niż stworzenie proc przechowywanej lub UDP w niektórych przypadkach.

+0

Czy nie jest to podatne na ataki typu SQL injection? – stefann

+0

@stefann, rozumiem, że EF analizuje to i chroni przed takimi atakami. –

+1

EF nie przechwyciłoby żadnego iniekcji sql w tym konkretnym przykładzie. Generowałby to jako sparametryzowane zapytanie SQL, które ma tę wrodzoną ochronę przed iniekcją SQL. Jeśli łączyłbyś ten tekst wyszukiwania z rzeczywistym ciągiem, to EF przeanalizowałby to i złapałby (nie wszystkie) zastrzyki. Złapałby najbardziej uciążliwe, takie jak "usuń z ...", ponieważ nie byłoby to poprawnie przetwarzane. –

Powiązane problemy