У меня есть консольное приложение C #, которое я хотел бы продолжать работать, даже когда его база данных падает.В этом случае он должен опросить базу данных, чтобы узнать, когда она вернется в оперативный режим, а затем возобновить работу.У меня есть этот код, который мне не нравится:
public static T Robust<T>(Func<T> function)
{
while (true)
{
try
{
return function();
}
catch (GenericADOException e)
{
Console.WriteLine("SQL Exception. Retrying in 10 seconds");
Thread.Sleep(10000);
}
}
}
[...]
N.Robust(() => Session.CreateCriteria(typeof(MyEntity)).List());
Проблема в том, что я должен вставлять эту надоедливую N.Robust
конструкцию везде, которая загромождает код.Кроме того, я рискую где-то забыть.Я изучал использование EventListeners или Inceptors NHibernate для него, но не смог заставить его работать.Неужели мне действительно нужно форкнуть NHibernate, чтобы это работало?
Обновление Хорошо, поэтому я смог преодолеть одну из двух моих проблем.Внедрив своих собственных слушателей событий, я, по крайней мере, могу гарантировать, что все вызовы к базе данных будут проходить через вышеупомянутый метод.платить за увеличение времени безотказной работы.