2016-12-05 5 views
0

ASP.NETのWebApiコントローラに10秒ごとに要求を出そうとしています。コントローラは、新しいデータが利用可能な場合(Enitityフレームワークの使用)、データベース(SQL Server)をチェックインする必要があります。ここにコントローラーの側ですポーリングデータのASP.NETコントローラのクエリ数を減らす

public class RemoteCommandController : ApiController 
{ 
    public Command Get(String id) 
    { 
     Command command = null; 
     ProxyCommand proxycommand = null; 
     Device deviceSearch; 

     using (var systemDB = new DB()) 
     { 
      deviceSearch = systemDB.Devices.Include("CommandList").Where(d => d.Name.Equals(id)).SingleOrDefault(); 
      command = deviceSearch.CommandList.LastOrDefault(); 
     } 


     if (command.IsExecuted == false) 
     { 
      proxycommand = ConvertingObjects.FromCommandToProxy(command); 

     }      

     return proxycommand; 
    } 
} 

私はこのコントローラーを呼び出すたびにDBに照会することを避けたいと思います。クエリーの数を減らすためにこのコントローラを改善する方法はありますか? 私はセッションを使用することを考えていましたが、私は良い考えではないと思います...

+0

キャッシュの意味は? – Daniele

+0

私は[SignalR](https://www.asp.net/signalr/overview/getting-started/introduction-to-signalr)をセットアップします – Shoe

答えて

1

ちょうどoutput cachingを使用してください。この属性をコントローラに追加します。

[OutputCache(Duration=10, VaryByParam="none")] 
public class RemoteCommandController : ApiController 
{ 
    //etc..... 

必要に応じて継続時間を増減します。コマンドリストが決して変更されない場合、期間を不当に高く設定することができ、コントローラは一度だけ呼び出されます。

+0

それは私を助けることができますが、データベースのデータが変更されたらどうなりますか?出力キャッシュはデータベース変更のフィードバックを持つことができますか? – Daniele

+0

はい、[この方法](http://stackoverflow.com/questions/16194140/how-to-invalidate-cache-data-outputcache-from-a-controller)を使用してキャッシュをリセットできます。 –

+0

ApiControllerでは動作しません – Daniele

関連する問題