0

Le code suivant:Pourquoi l'appel de recherche de texte intégral dans SQL Server 2008 échoue-t-il à l'intérieur de la portée de la transaction?

var foo = Users.Join(
       tvf_SearchUsers(queryString), 
       u => u.User_Id, 
       s => s.User_Id, 
       (u, s) => u); 

Sélectionne les utilisateurs qui correspondent à la chaîne de requête basée sur une fonction d'une valeur de la table (de tvf_SearchUsers), qui utilise la recherche en texte intégral. Cet extrait de code fait partie d'une méthode plus grande qui fonctionne correctement lorsqu'il est utilisé en production. Toutefois, lorsque j'appelle la même méthode dans le cadre d'un test MBUnit, qui possède un attribut rollback, la recherche échoue à renvoyer les résultats attendus. Si je supprime l'attribut rollback, cela fonctionne correctement. Le test unitaire crée des utilisateurs fictifs, etc. qui sont ensuite nettoyés par l'annulation. Il semble que ces éléments créés ne sont pas vus par la fonction de valeur de table, comme si elle était en dehors de la portée de la transaction. Est-ce que quelqu'un sait comment contourner cela?

Mise à jour

Si je remplace la fonctionnalité de recherche en texte intégral avec une requête plus simple dans le TVF l'opération se déroule comme prévu. Le problème a donc quelque chose à voir avec la recherche en texte intégral. J'utilise SQL Server 2008 de sorte qu'Akaik SQL Server devrait être en mesure de conserver la requête en texte intégral dans la portée de la transaction.

Répondre

1

Cela est probablement dû à la combinaison de recherche/transaction de texte intégral. Je ne pense pas que la recherche en texte intégral verra les changements lorsque vous êtes sous une transaction si elle est sql 2005. Cochez cette case http://blog.stackoverflow.com/2008/11/sql-2008-full-text-search-problems/, quand il est mentionné que SQL Server 2008 fonctionne maintenant avec des transactions en recherche plein texte et cela a causé questions à SO il y a quelque temps.

+0

Merci pour le lien, intéressant ... Je cours actuellement contre 2008. Beaucoup de choses que je fais vont être changées en quelque chose comme Lucene à une date ultérieure de toute façon, ce n'est pas une option pour le moment non plus. J'ai juste besoin d'un simple hack pour que mes tests unitaires fonctionnent à nouveau. – LaserJesus

Questions connexes