首页 > 解决方案 > 当 Manager 多次调用时,C# 中的惰性单例模式出现 DataReader 错误

问题描述

我在 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 进行了一次调用,既检查它是否存在,然后返回现有的新创建的一个),但是处理这个问题的正确方法是什么?如何关闭第一个实例?

标签: c#mvvmsingleton

解决方案


推荐阅读