【问题标题】:.NET/MVC2 data caching using Entity Data Models.NET/MVC2 数据缓存使用实体数据模型
【发布时间】:2011-04-12 00:38:56
【问题描述】:

我遇到了一个奇怪的缓存问题,我认为这可能与我使用实体数据模型作为数据源这一事实有关。

问题是我可以直接更新数据库,并且在我重新发布项目之前它不会反映在实际站点上。在本地查看项目时,数据确实显示正常。

奇怪的是它只在前端不正确。如果我通过 CMS 查看记录,它会正确显示。

一些源代码:

// *** CMS CONTROLLER ***
[HandleError]
public class SiteManagerController : Controller
{
    static DataModel DB = new DataModel();
    // via CMS Controller    
    // CMS - Get the data *** PULLS DATA CORRECTLY
        public ActionResult Content()
        {
            List<SiteContent> viewData = DB.SiteContents.OrderBy(c => c.Title).ToList();
           return View(viewData);
        }

   // via CMS Controller
   // CMS - Update logic
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult ContentEdit(int ID, FormCollection formValues)
        {
            SiteContent siteContent = DB.SiteContents.Single(c => c.ID == ID);
            try
            {
                UpdateModel<SiteContent>(siteContent);
                DB.SaveChanges();
                return RedirectToAction("Content");
            }
            catch
            {
                throw;
            }
        }
  }

       // *** HOME CONTROLLER ***
       [HandleError]
       public class HomeController : Controller
       {
           static DataModel DB = new DataModel();
            [System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
            public ActionResult Index(string strSlug)
            {
                data = DietCenterDB.SiteContents.Single(c => c.Slug == strSlug);

                return View(data);
            }

       }

* 更新 * 似乎存在与此问题相关的某种定时延迟。如果我更新 CMS/数据库,15-20 分钟后一切正常。可能是一些与前端数据访问相关的对象需要超时或过期才能抓取新的内容?

* 更新 #2 * 似乎只有 varchar/text 字段没有正确更新。如果我更改一个 int 字段,它会正确更新,并且每个页面上的信息都会更改。

【问题讨论】:

    标签: .net model asp.net-mvc-2 entity


    【解决方案1】:

    您的“DB”对象在哪里被实例化,它的范围是什么?您不应该尝试在任何地方缓存该对象;为每个请求创建一个新请求并让它被 GC'ed。从这里的一小段代码来看,这可能是你麻烦的根源。

    【讨论】:

    • 更新了原始帖子以包含有关如何实例化 DB 对象的更多详细信息。
    • 啊哈;我想我们在这里。您不应将 DB 对象声明为静态的。这不仅会导致您遇到意外缓存,而且相关对象不是线程安全的,并且随着时间的推移可能会占用大量资源。
    • 这里是更多信息的链接:blogs.msdn.com/b/alexj/archive/2009/05/07/…
    猜你喜欢
    • 2010-10-25
    • 2015-08-08
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多