c# - 单例服务可以使用(作用域)dbContext 吗?
问题描述
我需要保留从 Db 获得的几个值,并且在会话期间保持不变,尽管它们可能会由于用户发送特定请求而改变。我们曾经使用 Session 变量来做到这一点。
我想注册一个 Singleton 服务,它将从 Db 中获取一些值并在整个会话期间保留它们。所以该服务需要我的 DbContext。
界面很简单:
interface IPhrases
{
Task SetPhrasesForLanguage(int LanguageID);
}
服务类与此类似:
public class LangPhrases : IPhrases
{
private OVContext _context;
private int _LanguageID;
public string PageHeading { get; set; }
public LangPhrases(OVContext context, int LanguageID)
{
_context = context;
_LanguageID = LanguageID;
}
public Task SetPhrasesForLanguage(int LanguageID)
{
IQueryable<clsPhrases> lPhrases = (from p in _context.Phrases
where p.LangaugeId == LanguageID
select new clsPhrases()
{
Phrase=p.Phrase,
VarID=p.VarId
});
//logic to get PageHeading from the lPhrases collection
}
}
将作用域 DbContext 传递给单例服务是否会在请求之间将 DbContext 保留在内存中?
澄清一下:我正在寻找一种方法来获取这些值并将它们保留在会话中,而不将 DbContext 保留在内存中。
解决方案
您应该使用请求范围的服务和IMemoryCache来缓存值。如果在缓存中找不到值,请从 DbContext 中读取它们,它也应该是 Request-Scoped。
推荐阅读
- sql - COUNT(*) 返回更少的行数
- php - Wordpress 中的调度程序
- cordova - android 7 及更高版本中的“通过 Intent.getData() 暴露在应用程序之外”错误
- c# - c#控制器中剃刀中selectList的值
- javascript - React 无法识别 DOM 元素上的 `eventKey`(也是 activeKey)道具
- apache-spark - 尝试在 Pyspark 中保存和加载逻辑回归模型时出错
- replace - 如何在pyspark中替换左连接表中的空值
- sql - 如何在 Netezza 中比较 BOOL 和 INTEGER?
- three.js - 三 js - 如何创建地面反射以仅反射网格
- python - python(cv2)中的旋转图像不会居中