0

次のコード:

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

全文検索を利用するテーブル値関数 (tvf_SearchUsers) に基づいて、クエリ文字列に一致するユーザーを選択します。このコード スニペットは、本番環境で使用すると正常に機能する、より大きなメソッドの一部です。ただし、ロールバック属性を持つ MBUnit テストの一部として同じメソッドを呼び出すと、検索で予期した結果が返されません。ロールバック属性を削除すると、正しく機能します。単体テストは、ロールバックによってクリーンアップされるダミー ユーザーなどを作成します。これらの作成されたアイテムは、トランザクション スコープの外にあるかのように、テーブル値関数によって認識されていないようです。これを回避する方法を知っている人はいますか?

更新しました

tvf で全文検索機能をより単純なクエリに置き換えると、操作は期待どおりに進みます。したがって、問題は全文検索に関係しています。私はSQL Server 2008を使用しているので、SQL Serverは全文クエリをトランザクションスコープに保持できるはずです。

4

1 に答える 1

1

全文検索・トランザクションの組み合わせによるものと思われます。SQL 2005の場合、トランザクション中に全文検索で変更が表示されるとは思いません。この投稿を確認してください https://blog.stackoverflow.com/2008/11/sql-2008-full-text- search-problems/では、SQL Server 2008 が全文検索でトランザクションを処理するようになり、それが以前に SO にいくつかの問題を引き起こしたことが言及されています。

于 2009-03-10T04:32:20.797 に答える