获取数据库常量并将其存储在缓存中

时间:2011-10-12 10:30:38

标签: c# database generics caching constants

项目信息:WPF,PRISM,C#4.0,WCF,实体框架,SQL(快递)

我的数据库包含几个“常量”,例如一个人有分类 - >自然人(ID = 1)或合法人(ID = 2)。

我想从DB中获取这些常量,并将它们存储在缓存中,因此它们可以在整个应用程序中使用,因此它们不是“硬编码”的。我知道你可以将这些常量存储在一个静态类中,但这只有在数据库中这些常量没有改变时才会起作用(我不想依赖于这个事实)。

我的问题是:如何有效地将这些常量加载到数据库中并将它们放入我的缓存中?

以下是我现在写的方式,但感觉不对..

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;
}

关于如何解决这个问题或者让它变得更好的任何想法?

感谢您的帮助!!

PS:任何提示也值得赞赏:)

1 个答案:

答案 0 :(得分:1)

你不能只是建一本字典吗?

var classifications = objectcontext.Classification.ToDictionary(c => c.Value, c => c.ClassificationID);

然后你可以检索值:

classifications["Natuurlijk Persoon"]