Ошибка DataReader с Lazy Singleton Pattern в C #, когда менеджер вызывается более одного раза - PullRequest
0 голосов
/ 26 ноября 2018

Я использую ленивый шаблон синглтона в 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, который проверяет, существует ли он, а затем возвращает либо существующий, либо только что созданный), но как правильно это сделать?Как мне закрыть первый экземпляр?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...