当前位置:  开发笔记 > 编程语言 > 正文

DbContext缓存

如何解决《DbContext缓存》经验,为你挑选了2个好方法。

我知道DbContext的缓存并不是一个好主意.但我想做得很好.你怎么看待这种方式?

public class Context : DbContext
{
    private Context()
    {
    }

    private static WeakReference _cachedContext;

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

计划在没有IDisposable的情况下使用此代码.在客户端进行调用.除了单身(反)模式,这会导致什么问题?谢谢.



1> spender..:

DbContext是一个缓存.长时间保持它是一个糟糕的想法......它会慢慢消耗你的应用程序的内存,这些内存可能会被陈旧.

它不是按照您提出的方式使用的.

不要这样做.

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

 using(var ctx = new MyDbContext())
 {
      //make some changes
      ctx.SaveChanges();
 }

这就是设计使用的方式.正确使用它.



2> CodeCaster..:

这是一个XY问题.为什么要"缓存"DbContext?你认为从中获益有什么好处?

你不应该这样做.这堂课不是为了这个.它会导致性能问题(撤消您认为获得的好处)和附加无效实体后的持久性错误 - 您将永远无法再次使用此上下文保存实体,因为更改跟踪器保存实体.

请参阅使用Castle Windsor在ASP.NET MVC应用程序中正确使用EF的DBContext,使用DbContext,使用Entity Framework 6正确管理DbContext:深入指南,管理dbContext的生命周期或任何其他数千次点击在网上搜索"实体框架dbcontext lifetime".

如果要缓存数据,请改为缓存记录本身.现有的解决方案(代码和库)可以帮助您实现这一点,称为"二级缓存".不需要自己写.请参阅示例如何使实体框架缓存某些对象.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有