11

Ora che SQL Server 2008 ha integrato la ricerca full text. Sto cercando di utilizzarlo per potenziare la ricerca del mio sito web. Sto anche cercando di utilizzare il framework di entità ADO.NET per il mio ORM, ma mi chiedevo come si fa la ricerca full text (FTS) con Linq al framework di entità ADO.NET?Come si esegue la ricerca a testo integrale (FTS) con Linq per il framework di entità ADO.NET?

C'è qualche supporto nel framework di entità ADO.NET o sono bloccato utilizzando lo method of creating a function which uses the full text search predicates?

+0

Stai utilizzando EF 4 o precedente? –

risposta

12

Entity Framework supporta solo un sottoinsieme della funzionalità sql disponibile (in parte per rimanere compatibile su un intervallo di provider). Tuttavia, anche LINQ-to-SQL (che supporta molti più costrutti specifici di SQL Server, come le UDF) non supporta AFAIK full-text.

Credo che sia necessario utilizzare una stored procedure/udf. L'approccio UDF è preferito, poiché il livello dei metadati è molto più forte ed è componibile sul server db, tuttavia, Entity Framework non lo fa (o non l'ha fatto, l'ultima volta che ho controllato) come UDF; usare una stored procedure.

+0

Nel contesto della risposta sopra, questo potrebbe aiutare anche: http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql- expressions.aspx –

+0

@Marc, dopo tutti questi anni hai la possibilità di ricordare che cosa comporta l'approccio UDF? (In realtà, non importa, vedo alcuni esempi quando si utilizza CONTAINSTABLE) –

10

Ho visto codice come questo per EF4:

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

Questo può essere più semplice di creare una stored procedure o UDP, in alcuni casi.

+0

Non è questo suscettibile agli attacchi di SQL injection? – stefann

+0

@stefann, è a mia conoscenza che EF lo analizzi e protegga da tali attacchi. –

+1

EF non catturerebbe alcuna iniezione sql in quel particolare esempio. Lo genererebbe come una query SQL parametrizzata, che ha quella protezione intrinseca contro l'iniezione SQL. Se dovessi concatenare il testo di ricerca nella stringa effettiva, EF lo analizzerebbe e prenderebbe alcune (non tutte) iniezioni. Prenderebbe quelli più dirompenti come "cancella da ..." in quanto ciò non verrebbe correttamente analizzato. –

Problemi correlati