2017-01-04 3 views
1

私はSQLサーバーを持っていますテーブル値関数; Entity FrameworkデータモデルにインポートしたMyTVFとしましょう。私はその戻り値の型を既存のエンティティMyEntityに設定しました。直接関数を実行テーブル値関数を実行するときのEntity Frameworkタイムアウト

一瞬がかかりますが、EFのdbContextを経由して、それを実行するときにそれがタイムアウトする次のようなメッセージを持つ:

実行タイムアウトが発生しました。操作が完了するまでにタイムアウト時間が経過したか、サーバーが応答していません。

EFで生成されたSQLを実行して関数を実行する場合も、分割秒が必要です。

ここで何がうまくいかないと診断するにはどうすればよいですか?

+0

: あなたが実行タイムアウトを増やす必要がありそうもないケースでは、このように設定することができます。あなたのEFコールが実際にデータベースにヒットしたかどうか、そしてそれが何をするかを確認してください。 Exceptionを取得するのにどれくらい時間がかかりますか?瞬時に戻ってきたら、メッセージの最後の部分ともっと関係があると思います:**またはサーバーが応答していません**。 – krillgar

+0

タイムアウト期間の終了時に戻ります。プロファイリング機能を提供していないazure SQLデータベースを使用しています。 –

+0

ローカルデータベースをスピンアップし、同じことが起こるかどうか確認してください。ローカルデータベースに対して機能する場合は、Microsoftの担当者に連絡してさらに詳しい情報を入手する必要があります。 – krillgar

答えて

-1

まず、作成されているSQLを確認する必要があります。 ToList()、ToArray()、Count()、Single()、SingleOrDefault()などを呼び出す前にIQueryableオブジェクトクエリでToString()を呼び出すか、データベースで値を設定することができます。ログは次のようになります。

ctx.Database.Log += (s) => Console.Log(s); 

その後、正確に同じクエリをデータベースで直接実行し、何が起こるかを確認してください。私はあなたのSQL Serverインスタンス上で、いくつかの監視を設定でしょう

((IObjectContextAdapter)ctx).ObjectContext.CommandTimeout = somevalue; 
+0

私の質問に書いているように、生成されたSQLは即座に戻ります。 –

関連する問題