获取数据库的常量并将其存储在缓存中
项目信息:WPF,PRISM,C#4.0中,WCF,实体框架,SQL(快递)获取数据库的常量并将其存储在缓存中
我的数据库包含了几个 “常量” 如一个人有一个分类 - >自然人(ID = 1)或合法人(ID = 2)。
我想从数据库中获取这些常量,并将它们存储在缓存中,以便它们可以在整个应用程序中使用,因此它们不会被“硬编码”。我知道你可以将这些常量存储在一个静态类中,但只有在这些常量不会在数据库中发生变化时才会起作用(并且我不想依赖这个事实)。
我的问题是:我如何有效地将这些常量从数据库中加载并将它们放入缓存中?
下面是如何我都写过了,但它只是感觉不对..
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);
我在缓存中使用了一个Repository,所以我也可以稍后进行单元测试。
我试图做一个通用梅索德,但我非常失败的: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;
}
的我怎么能解决这个问题,或者使其更好任何想法?
感谢您的任何帮助!
PS:任何提示也赞赏:)
难道你只是建立一个字典?
var classifications = objectcontext.Classification.ToDictionary(c => c.Value, c => c.ClassificationID);
然后你可以检索值:
classifications["Natuurlijk Persoon"]
感谢您的回复,但是如何访问跨多个解决方案的“分类”?我有一个管理我的WCF解决方案的“经理解决方案”,在这个经理解决方案中我想发起常量。当我使用这本词典时,我可以将它用于“儿童”解决方案之一吗?谢谢。 BTW:字典是我在找的东西,我可以在我的缓存中放置字典吗? –
您应该可以将字典放入缓存中。一旦它在字典中,它就像任何其他C#对象一样,并且没有连接等返回到数据库。至于访问多个解决方案,这取决于您的代码... – Steven
如果我可以把它放在我的缓存,然后我可以访问它:)谢谢一堆的帮助! –
是不是文本值“Natuurlijk Persoon”更有可能比它的ID号来改变? –