2016-12-05 101 views
0

我試圖每10秒向ASP.NET中的webApi控制器發出請求。控制器必須檢查數據庫(SQL Server)是否有新的數據可用(使用enitity框架)。這裏是控制器端減少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; 
    } 
} 

我想避免查詢數據庫每次我打電話給這個控制器。有沒有辦法改進這個控制器以減少查詢的數量? 我正在考慮使用Session,但我認爲這不是一個好主意...

+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