2011-10-12 62 views
0

項目信息: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:任何提示也讚賞:)

+0

是不是文本值「Natuurlijk Persoon」更有可能比它的ID號來改變? –

回答

1

難道你只是建立一個字典?

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

然後你可以檢索值:

classifications["Natuurlijk Persoon"] 
+0

感謝您的回覆,但是如何訪問跨多個解決方案的「分類」?我有一個管理我的WCF解決方案的「經理解決方案」,在這個經理解決方案中我想發起常量。當我使用這本詞典時,我可以將它用於「兒童」解決方案之一嗎?謝謝。 BTW:字典是我在找的東西,我可以在我的緩存中放置字典嗎? –

+0

您應該可以將字典放入緩存中。一旦它在字典中,它就像任何其他C#對象一樣,並且沒有連接等返回到數據庫。至於訪問多個解決方案,這取決於您的代碼... – Steven

+0

如果我可以把它放在我的緩存,然後我可以訪問它:)謝謝一堆的幫助! –

相關問題