В процессе добавления обработки исключений для случайных проблем SQL (случайные таймауты и т. Д.) К моим различным запросам в моем веб-приложении EF4 я действительно должен был реорганизовать общий код обработки исключений в одну функцию для обслуживания.Но я делаю много разных типов запросов LINQ для разных сущностей.
Я думаю, что мой первый проход на этом близок.В этом примере у меня есть две перегруженные функции, которые принимают различные виды параметров, которые выполняют очень похожий запрос к базе данных:
public bool check_person(string name)
{
return CheckInternal(people.Where(x => x.user_name == name));
}
public bool check_person(Guid ID)
{
return CheckInternal(people.Where(x => x.user_ID == ID));
}
protected bool CheckInternal(IQueryable<people> peepQuery)
{
try
{
return(peepQuery).Any(); //causes actual db query
}
catch (Exception ue)
{ blah blah retry blah blah }
}
Так что я просто перенесу фактическое перечисление в функцию CheckInternal
, которая имеет всевиды причудливой обработки исключений и логики повторов, которые полностью независимы от запроса или даже от запрашиваемой таблицы.
Теперь недостаток в том, что я могу передать только IQueryable<people>
, но я хочу бытьв состоянии передать IQueryable
для множества различных типов сущностей, кроме типа people
.
Я попытался обернуть голову вокруг лямбда-выражений, чтобы позволить мне передавать любые запросы по любому типу сущности иесть только один обработчик исключений wiz-bang для поддержки, но я просто еще не там со своими знаниями лямбды и делегата.Я не могу понять это.
Может кто-нибудь дать мне подсказку?Что если бы у меня была другая функция, которая хотела бы выполнить запрос к таблице виджетов и передать ее CheckInternal
?Крайне важно, чтобы фактическое перечисление only происходило в функции CheckInternal
, поскольку именно здесь будет выброшено исключение.