2013-05-31 27 views
0

我實現了一個的MemoryCache下面就http://www.codeproject.com/Articles/167282/NET-4-0-MemoryCache-with-SqlChangeMonitor沒有添加的MemoryCache

我有一個問題,緩存完全不添加的例子。

我的代碼:

using System.Collections.Generic; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Runtime.Caching; 

namespace ClassLibrary{ 
    public partial class TRANSLATION { 

     public static string GetTranslationString(int id) 
     { 

      string trans = TRANSLATION.cached.Where(x => x.id == id).Select(x => x.Value).FirstOrDefault(); 

      if (trans == null) 
      { 
       return ""; 
      } 
      else { 
       return trans; 
      } 
     } 

     public static List<TRANSLATION> cached() 
     { 
      List<TRANSLATION> lstTRANSLATION; 

      if (MemoryCache.Default["TRANSLATION"] == null) 
      { 
       CacheItemPolicy policy = new CacheItemPolicy(); 

       SqlDependency.Start(cacher.sqlConn()); 

       using (SqlConnection conn = new SqlConnection(cacher.sqlConn())) 
       { 
        using (SqlCommand command = new SqlCommand("SELECT [ID],[Value] FROM [TRANSLATION]", conn)) 
        { 
         command.Notification = null; 
         SqlDependency dep = new SqlDependency(); 
         dep.AddCommandDependency(command); 
         conn.Open(); 

         SqlDataReader sqlReader = command.ExecuteReader(); 

         lstTRANSLATION = new List<TRANSLATION>(); 
         while (sqlReader.Read()) 
         { 
          TRANSLATION trans = new TRANSLATION(); 
          trans.ID = sqlReader.GetInt32(0); 
          trans.Value = sqlReader.GetString(1); 
          lstTRANSLATION.Add(trans); 
         } 

         SqlChangeMonitor monitor = new SqlChangeMonitor(dep); 
         policy.ChangeMonitors.Add(monitor); 
        } 
       } 

       MemoryCache.Default.Add("TRANSLATION", lstTRANSLATION, policy); 
      } 
      else 
      { 
       lstTRANSLATION = (List<TRANSLATION>)MemoryCache.Default.Get("TRANSLATION"); 
      } 

      return lstTRANSLATION; 
     } 
    } 
} 

當我通過代碼,它沒有找到緩存,即使經過。新增(),我無法找到高速緩存行。

當我添加以下代碼:

MemoryCache.Default.Add("test", "test", DateTime.Now.AddMinutes(5)); 

我可以在緩存中找到此鍵。

我在做什麼錯?

回答

0

我找到了解決辦法:

using (SqlCommand command = new SqlCommand("SELECT [ID],[Value] FROM dbo.[TRANSLATION]", conn)) 

添加dbo.的伎倆。