一个缓存问题求助各位大侠..
这里我使用了EnterPrise Library中的Cache Block。这里是BLL层
public void GetAllNews(NewsDS mynewsDS)
{
if (EnterLibFacade.GetCacheItem("NewsList") == null)
{
NewsDAL.GetAllNews(mynewsDS, mynewsDS.News.TableName);
EnterLibFacade.AddCacheItem("NewsList", mynewsDS, (int)CacheExpirationTime.Normal, 5);
}
else
{
mynewsDS = (NewsDS)EnterLibFacade.GetCacheItem("NewsList");
}
}
这是WEB层
private NewsBLL mynewsBLL;
private NewsDS mynewsDS;
protected void Page_Load(object sender, EventArgs e)
{
mynewsBLL = NewsBLL.GetNews;
mynewsDS = new NewsDS();
mynewsBLL.GetAllNews(mynewsDS);
for (int i = 6; i < mynewsDS.Tables["News"].Rows.Count; i++)
{
mynewsDS.Tables["News"].Rows.RemoveAt(i);
}
dl_news.DataSource = mynewsDS;
dl_news.DataBind();
}
我从WEB层第一次调用这个方法时,是从数据库中直接取出来的,数据可以正确读取,但是当 页面刷新 或者 页面跳转,这一次是从缓存中读取,我调试了很久,在BLL时,mynewsDS有数据,但回到表现层时mynewsDS就没数据了。 想了许久还是没想出来,求助各位大侠。 (NewsDS是数据集) --------------------编程问答-------------------- 你这样定义private NewsDS mynewsDS;
当然没有了....
Cache不是这样用的 --------------------编程问答-------------------- 好好理解下对象的生命周期的概念,
以及缓存的原理与用法,
再回头就很容易理解你这个问题了 --------------------编程问答-------------------- 那我就理解不到了,为何从数据库中读取出来可以绑定到datalist,而从cache中读取出来后,一样的数据填充进去mynewsDS中 却不可以了... (-_- |) --------------------编程问答-------------------- 两层有数据联系吗? --------------------编程问答-------------------- 有啊,第一次加载页面时是可以绑定到datalist的,数据正确。而且第二次我调试时,我也能看到从cache中读出来的数据,也是正确的数据。只是在返回到WEB层就没数据了.. --------------------编程问答-------------------- public NewsDS GetAllNews()
{
NewsDS mynewsDS;
if (EnterLibFacade.GetCacheItem("NewsList") == null)
{
NewsDAL.GetAllNews(mynewsDS, mynewsDS.News.TableName);
EnterLibFacade.AddCacheItem("NewsList", mynewsDS, (int)CacheExpirationTime.Normal, 5);
}
else
{
mynewsDS = (NewsDS)EnterLibFacade.GetCacheItem("NewsList");
}
return mynewsDS;
}
虽然类是按.....传递的
但还是用return把 --------------------编程问答-------------------- 我也想到了,用return,但是不明白其中的道理,2L的大人说得那么玄乎,我跑去看了下还是没发现问题所在。哪位大侠能把道理给说明白,造福四方啊~~ --------------------编程问答-------------------- 可能是我没看懂你的代码,搞错了吧 --------------------编程问答-------------------- (O_o |) 看来这问题是个大问题...
补充:.NET技术 , ASP.NET