項目信息: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:任何提示也讚賞:)
是不是文本值「Natuurlijk Persoon」更有可能比它的ID號來改變? –