首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DbContext缓存

DbContext缓存
EN

Stack Overflow用户
提问于 2015-12-04 11:22:55
回答 2查看 8.3K关注 0票数 5

我知道DbContext的缓存不是个好主意。但我想做的很好。你觉得这条路怎么样?

代码语言:javascript
复制
public class Context : DbContext
{
    private Context()
    {
    }

    private static WeakReference<Context> _cachedContext;

    public Context Instance
    {
        get
        {
            Context context;
            if (!_cachedContext.TryGetTarget(out context))
            {
                context = new Context();
                _cachedContext.SetTarget(context);
            }
            return context;
        }
    }
}

此代码计划在客户端不使用IDisposable.Dispose调用。除了单例(反)模式之外,这会引起什么问题?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 11:26:05

DbContext是一个缓存。坚持很长时间是个糟糕的主意.它将慢慢地消耗应用程序的内存,保存那些很可能已经过时的数据。

它不是按照你提议的方式设计的。

不要这么做。

DbContext是一个瞬态对象,应该在尽可能小的范围内使用和处理。

代码语言:javascript
复制
 using(var ctx = new MyDbContext())
 {
      //make some changes
      ctx.SaveChanges();
 }

它就是这样设计出来的。好好利用它。

票数 18
EN

Stack Overflow用户

发布于 2015-12-04 11:26:20

这是一个XY问题为什么想要“缓存”DbContext?你觉得你能从中得到什么好处?

你永远都不该这么做。这门课不是用来做这个的。相反,它将导致性能问题(取消您认为可以获得的好处)和附加无效实体之后的持续错误--您将再也无法使用此上下文保存实体,因为更改跟踪器保存实体。

请参阅城堡温莎在ASP.NET MVC应用程序中正确使用EF的ASP.NET使用DbContext使用实体框架6正确地管理DbContext :深度指南管理dbContext的生存期或其他数千次搜索web中的“实体框架dbcontext生存期”。

如果您想要缓存数据,那么应该缓存记录本身。有一些现有的解决方案(代码和库)可以帮助您这样做,这就是所谓的“二级缓存”。不用自己写。例如,参见如何使实体框架缓存某些对象

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

https://stackoverflow.com/questions/34087243

复制
相关文章

相似问题

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