Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取数据库常量并将其存储在缓存中_C#_Database_Generics_Caching_Constants - Fatal编程技术网

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

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 (

项目信息:WPF、PRISM、C#4.0、WCF、实体框架、SQL(express)

我的数据库包含几个“常量”,例如一个人有一个分类->自然人(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;
}
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号更可能更改吗?