Получение констант базы данных и их хранение в кеше - PullRequest
0 голосов
/ 12 октября 2011

Информация о проекте: WPF, PRISM, C # 4.0, WCF, Entity Framework, 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);

Я использую репозиторий для своего кэширования, поэтому я также могу выполнить модульный тест позже.

Я пытался создать общий метод, но я ужасно потерпел неудачу: 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 Ответ

1 голос
/ 12 октября 2011

Разве вы не можете просто построить словарь?

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

Затем вы можете получить значение:

classifications["Natuurlijk Persoon"]
...