首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未添加MemoryCache

未添加MemoryCache
EN

Stack Overflow用户
提问于 2013-05-31 18:05:06
回答 1查看 922关注 0票数 0

我已经按照http://www.codeproject.com/Articles/167282/NET-4-0-MemoryCache-with-SqlChangeMonitor上的示例实现了一个内存缓存

我有一个问题,根本没有添加缓存。

我的代码:

代码语言:javascript
复制
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()之后的那行,我也找不到缓存。

当我添加以下代码时:

代码语言:javascript
复制
MemoryCache.Default.Add("test", "test", DateTime.Now.AddMinutes(5));

我可以在缓存中找到这个键。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 17:17:17

我找到了解决方案:

代码语言:javascript
复制
using (SqlCommand command = new SqlCommand("SELECT [ID],[Value] FROM dbo.[TRANSLATION]", conn))

添加dbo.做到了这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16854775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档