Kendo Grid のツールバーに埋め込まれた jQuery AutoComplete からデータをフィルター処理し、それとページを並べ替える単純な要求があります。これが呼び出しを行うコードです。
Service.Get(s=> s.Name.Contains("Alcurt QI, In"), o => o.Name, 1, 15)
Web から入力した場合、結果の SQL は正しいですが、追加の一重引用符が埋め込まれています。SQL は、SQL プロファイラーを使用してキャプチャされます。結果のスニペットを次に示します。
WHERE [Extent1].[Name] LIKE @p__linq__0 ESCAPE N''~''
) AS [Project1]
) AS [Project1]
WHERE [Project1].[row_number] > 0
ORDER BY [Project1].[Name] ASC',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'%''Alcurt QI, In''%'
Name 列は nvarchar です。
LIKE を使用していることがわかりますが、余分な引用符に注意してください
@p__linq__0=N'%''Alcurt QI, In''%'
余分な引用符を削除すると、クエリは正常に機能します。SQLマネージャーでテストしました。
次に、HttpContext をモックする単体テストを作成し、同じコントローラー アクションを呼び出すと、SQL は正常に動作します。これは、欠落している引用符ではなく、そこからのSQLです。
WHERE [Extent1].[Name] LIKE @p__linq__0 ESCAPE ''~''
) AS [Project1]
) AS [Project1]
WHERE [Project1].[row_number] > 0
ORDER BY [Project1].[Name] ASC',N'@p__linq__0 varchar(8000)',@p__linq__0='%Alcurt QI, In%'
- OSはWindows7です
- ビジュアル スタジオ 2012
- Nuget、5.0、dBContext のエンティティ フレームワーク
- システムは MVC 4 ntier です
- ツールバーにオートコンプリートを備えたリクエスター剣道グリッド。
EntityFrameworkのバージョン等は確認済みです。
なんで?