Кэшируйте Hashtable в проекте MVC - PullRequest
0 голосов
/ 20 января 2012

У меня есть функция, простая функция из открытого класса.

Эта функция создает объект Hashtable с информацией, полученной из базы данных, часть его функции выглядит так:

try {
            while ( dataReader.Read() ) {
               Hashtable table1= new Hashtable();
               Hashtable table2= new Hashtable();

               table1.Add( dataReader["field1"].ToString(), Localization.English(dataReader["field1"]);

               table2.Add( dataReader["field2"].ToString(), Localization.French(dataReader["field2"]);
            }
         } catch ( Exception e ) {
            Console.WriteLine( e.Message );
         }

Я хочу кешировать эти два Hashtable и использовать их в других классах.Как я знаю, я не могу использовать HttpRuntime.Cache, даже если я использовал System.Web пространство имен.

Я видел, что HttpRuntime.Cache можно использовать в классе Model.

Есть ли другой способ кэшировать эти Hashtable s?

PS: Извините, если мойвопрос плохой.

Ответы [ 2 ]

1 голос
/ 20 января 2012

Вы можете использовать статический класс.

        public static class MyDictionary
   {
       public static Dictionary<string,string> French = new Dictionary<string,string>();

        public static Dictionary<string,string> English=new Dictionary<string,string>();
            public static MyDictionary(){   
          while ( dataReader.Read() ) {
           MyDictionary.English.Add( dataReader["field1"].ToString(),Localization.English(dataReader["field1"]));
           MyDictionary.French.Add( dataReader["field2"].ToString(),Localization.French(dataReader["field2"]));
          } 
        }        
      }

Тогда, если вы хотите получить значение слова

MyDictionary.English["Car"]; // this'll return a string value. if contains
MyDictionary.French["Car"]; // this'll return a string value. if contains
1 голос
/ 20 января 2012

Если у вас есть два проекта, например, проект Models или Entities и ваш веб-проект, все, что вам нужно сделать, это добавить ссылку в проекте Models на System.Web.Если вы не добавили ссылку на System.Web, то у вас не будет доступа к HttpRuntime или HttpContect, даже если есть пространство имен для System.Web.

После этого вы получите доступ к:

 System.Web.HttpRuntime.Cache

и может использовать

 HttpRuntime.Cache.Insert(
                                    CacheKey,
                                    CacheValue,
                                    null,
                                    DateTime.Now.AddMinutes(CacheDuration),
                                    Cache.NoSlidingExpiration
                                );

 Hashtable table1 = HttpRuntime.Cache[CacheKey] as Hashtable;
 HttpRuntime.Cache.Remove(CacheKey);

Вы также будете иметь доступ к

 System.Web.HttpContext.Current.Application

и можете использовать

 System.Web.HttpContext.Current.Application.Add("table1",myHashTable);
 Hashtable table1 = System.Web.HttpContext.Current.Application["table1"] as Hashtable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...