C# 获取数据库常量并将其存储在缓存中
项目信息:WPF、PRISM、C#4.0、WCF、实体框架、SQL(express) 我的数据库包含几个“常量”,例如一个人有一个分类->自然人(ID=1)或合法人(ID=2) 我想从数据库中获取这些常量,并将它们存储在缓存中,这样它们就可以在整个应用程序中使用,所以它们不是“硬编码”的。我知道可以将这些常量存储在静态类中,但只有在DB中这些常量不变的情况下(我不想依赖这个事实),这才有效 我的问题是:如何有效地将这些常量从数据库中加载并放入缓存 下面是我现在写的,但感觉不太对劲C# 获取数据库常量并将其存储在缓存中,c#,database,generics,caching,constants,C#,Database,Generics,Caching,Constants,项目信息:WPF、PRISM、C#4.0、WCF、实体框架、SQL(express) 我的数据库包含几个“常量”,例如一个人有一个分类->自然人(ID=1)或合法人(ID=2) 我想从数据库中获取这些常量,并将它们存储在缓存中,这样它们就可以在整个应用程序中使用,所以它们不是“硬编码”的。我知道可以将这些常量存储在静态类中,但只有在DB中这些常量不变的情况下(我不想依赖这个事实),这才有效 我的问题是:如何有效地将这些常量从数据库中加载并放入缓存 下面是我现在写的,但感觉不太对劲 using (
using (DetacheringenEntities objectcontext = new DetacheringenEntities())
{
int natuurlijkPersoonClassificationResult = objectcontext.Classification.Where(c => c.Value == "Natuurlijk Persoon").Select(c => c.ClassificationID).SingleOrDefault();
int rechtspersoonPersoonClassificationResult = objectcontext.Classification.Where(c => c.Value == "Rechtspersoon").Select(c => c.ClassificationID).SingleOrDefault();
int klantPersonAgreementRoleResult = objectcontext.PersonAgreementInvolvementRole.Where(p => p.Value == "Klant").Select(p => p.PersonAgreementInvolvementRoleID).SingleOrDefault();
... (about 10 more of these calls)
}
从数据库中取出这些后,我将它们放入缓存:
DefaultCacheProvider cacheProvider = new DefaultCacheProvider();
cacheProvider.Set("NatuurlijkPersoon", natuurlijkPersoonClassificationResult, 30);
我在缓存上使用了一个存储库,所以我也可以稍后进行单元测试
我试过做一个通用的方法,但失败得很惨:p
private int GetDatabaseConstantValue<T>(Expression<Func<T, bool>> expression, DetacheringenEntities context)
{
int result = context
.CreateQuery<T>(
"[" + typeof(T).Name + "]")
.Where(expression)
.Select(typeof(T).Name + "ID").FirstOrDefault(); --> This doesn't work (obviously), but I want to select the ID of that table (which is always Tablename + ID).
return result;
}
private int GetDatabaseConstantValue(表达式表达式,DetacherGenetities上下文)
{
int结果=上下文
.CreateQuery(
“[”+typeof(T.Name+“]”)
.Where(表达式)
.Select(typeof(T).Name+“ID”).FirstOrDefault();-->这显然不起作用,但我想选择该表的ID(它始终是Tablename+ID)。
返回结果;
}
有没有办法解决这个问题,或者让它变得更好
谢谢你的帮助
附言:任何提示都值得一提:)你就不能编一本字典吗
var classifications = objectcontext.Classification.ToDictionary(c => c.Value, c => c.ClassificationID);
然后可以检索该值:
classifications["Natuurlijk Persoon"]
感谢您的回复,但是我如何跨多个解决方案访问“分类”?我有一个“管理器解决方案”,它管理我的WCF解决方案,在这个管理器解决方案中,我想启动常量。当我使用这本词典时,我可以在“儿童”解决方案中使用它吗?谢谢顺便说一句:字典就是我要找的,我可以把字典放进缓存吗?你应该可以把字典放进缓存。一旦它在字典中,它就与任何其他C#对象相同,并且没有与数据库的连接等。至于跨多个解决方案进行访问,这取决于您的代码……如果我可以将其放在缓存中,那么我就可以访问它:)非常感谢您的帮助!文本值“Natuurlijk Persoon”不比其ID号更可能更改吗?