项目信息: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:任何提示也值得赞赏:)
答案 0 :(得分:1)
你不能只是建一本字典吗?
var classifications = objectcontext.Classification.ToDictionary(c => c.Value, c => c.ClassificationID);
然后你可以检索值:
classifications["Natuurlijk Persoon"]