Я использую ленивый шаблон синглтона в C # для своих менеджеров данных.Код в моем менеджере выглядит следующим образом:
private static readonly Lazy<ConditionManager> singleton =
new Lazy<ConditionManager>(() => new ConditionManager());
public static ConditionManager Instance { get { return singleton.Value; } }
Затем в моем коде я пытаюсь увидеть, существует ли элемент до его создания:
//see if condition exists. If it doesn't then create it.
List<Condition> conditions = ConditionManager.Instance.Select
(question.Id, ConditionType.ProjectQuestion);
Condition c;
if (conditions.Count == 0)
{
c = new Condition(question.Id, ConditionType.ProjectQuestion, ReleaseId);
c.Id = ConditionManager.Instance.Insert(c);
}
Проблема в том, чтоКогда я вызываю Insert, я получаю страшную ошибку: «Уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт первым».Я нашел обходной путь (у меня есть один вызов ConditionManager, который проверяет, существует ли он, а затем возвращает либо существующий, либо только что созданный), но как правильно это сделать?Как мне закрыть первый экземпляр?