我知道DbContext的缓存不是个好主意。但我想做得很好。你怎么看待这种方式?DbContext caching
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调用时使用。除单态(反)模式外,这可能导致什么问题?谢谢。
上下文的一般经验法则是创建尽可能晚,并尽可能快地杀死它。没有理由让它挂在身边。 – DavidG
为什么要缓存DbContext类?没有理由为什么你应该这样做。还有其他方法可以像DI容器一样管理DbContext类的处理(unity只是一个名称)。 – hbulens
你的WeakReference单身人士看起来超级狡猾。如果挂在上下文中的唯一东西是WeakReference,那么它将符合GC的条件。你需要一个强大的参考,而不是一个弱的参考。实际上,正因为如此,你的架构会比你以为你提出的架构意外地更好,因为偶尔你会得到一个新的上下文(但也可能是一些非常混乱的错误)。更好的是,不要拘泥于你的背景。这是一个比单身更重要的反模式。 – spender