2013-05-31 7 views
0

я реализовал MemoryCache следуя примеру на http://www.codeproject.com/Articles/167282/NET-4-0-MemoryCache-with-SqlChangeMonitorMemoryCache не добавил

У меня есть проблема, кэш не добавляется вообще.

Мой код:

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; 
     } 
    } 
} 

Когда я пошагово код, он не находит кэш, даже строку после .add(), я не могу найти тайник.

Когда я добавить следующий код:

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

я могу найти этот ключ в кэше.

Что я делаю неправильно?

ответ

0

Я нашел решение:

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

Добавление dbo. сделал трюк.

Смежные вопросы