Проект ASP.NET MVC 5.
Я знаю, что лучше всего использовать объект контекста EF в качестве следующего
using(var context = new ContextDB())
{
}
Но я работаю с большим существующим проектом, который неиспользовал эту практику.проект, использующий следующий шаблон
public abstract class BaseService
{
private static ContextDB _data { get; set; }
public static ContextDB Data
{
get
{
if (_data== null)
_data= new ContextDB();
return _data;
}
}
}
На самом деле, из-за этого шаблона я получаю это исключение (иногда, не всегда)
Итак, чтобы решить это, янеобходимо изменить весь код, который использует общее свойство Data
, и заменить его новым экземпляром ContextDB
, как я уже упоминал в начале вопроса.
Проблема в том, что это очень большая проблема.модификации, и мне не разрешат делать эту модификацию.
Вопрос, могу ли я решить эту проблему, не меняя тонны кода? Другими словами, могу ли я решить проблемы с изменениями, выполненными только внутри BaseService
класс, например, есть ли какое-либо событие, которое я мог бы обработать, чтобы узнать, выполняется ли какой-либо запрос, и затем избавиться от ContextDB
, вот псевдокод идеи в моей голове
public abstract class BaseService
{
public static ContextDB Data
{
get
{
ContextDB _data= new ContextDB();
_data.SqlQueryExecuted += () => { this._data.dispose(); }
return _data;
}
}
}
ПРИМЕЧАНИЕ. Событие SaveChanged
не подходит, поскольку не все запросы обновляются или вставляются.