Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 首选单例设计模式以获得DB连接_C#_Oop_Singleton - Fatal编程技术网

C# 首选单例设计模式以获得DB连接

C# 首选单例设计模式以获得DB连接,c#,oop,singleton,C#,Oop,Singleton,我看到许多开发人员为db连接创建了单例类。我只是想知道当应用程序被许多用户使用时,它是好是坏。如果不好,请讨论上述模式可能出现的所有坏情况 public class ConnSingleton { private static ConnSingleton dbInstance; private readonly SqlConnection conn = new SqlConnection(@"Data Source=127.0.0.1;database=s

我看到许多开发人员为db连接创建了单例类。我只是想知道当应用程序被许多用户使用时,它是好是坏。如果不好,请讨论上述模式可能出现的所有坏情况

public class ConnSingleton
    {
        private static ConnSingleton dbInstance;
        private readonly SqlConnection conn = new SqlConnection(@"Data Source=127.0.0.1;database=soa;User id=sa1;Password=sa1;");       

        private ConnSingleton()
        {
        }

        public static ConnSingleton getDbInstance()
        {
            if (dbInstance == null)
            {
                dbInstance = new ConnSingleton();
            }
            return dbInstance;
        }

        public SqlConnection GetDBConnection()
        {
            try
            {
                conn.Open();
                Console.WriteLine("Connected");
            }
            catch (SqlException e)
            {
                Console.WriteLine("Not connected : "+e.ToString());
                Console.ReadLine();
            }
            finally
            {
                Console.WriteLine("End..");
               // Console.WriteLine("Not connected : " + e.ToString());
                Console.ReadLine();
            }
            Console.ReadLine();
            return con;
        }

    }

public static void Main(string[] args)
{
     ConnSingleton cs = ConnSingleton.getDbInstance();
     cs.GetDBConnection();           
     Console.WriteLine("Connection Established");
}

我看不出这门课有什么好处。如果您希望这样做(我不赞成这样做),那么与一堆静态方法相比,您没有任何好处。singleton实例有什么好处?如何使用块将SqlConnection变量放入
块中

我认为对于那些想要全局变量的人来说,单例模式是一种过度使用的模式,但是读了一本书,书中提到了全局变量是不好的这一事实。现在他们又找到了另一本书,书中说“单身”是一种模式,模式是“好的”,他们终于有了一个借口,拥有一个全球性的家庭

作为一个全局变量是单例的副作用。如果你使用它的副作用,它不是一个很好的使用模式。我会说这是一种虐待

单例几乎不可能进行单元测试。这一个甚至不是线程保存,对非单例也没有任何用处。所以在我看来。。。删除该类


有多少人使用该应用程序无关紧要。每个都有自己的进程和单例,尽管这可能很糟糕。

实际上没有必要保留连接对象。应始终将其包装在一个容器中,并在使用后进行处理。NET还缓存了连接,因此也没有理由保持它打开。我更倾向于使用静态方法来实例化并返回一个新的SqlConnection。我很想知道,当我们使用内置连接池时,是谁创建并维护了连接池。它是由OS、sql server还是dotnet运行时管理的?单例也称为“反模式”。当我们关闭任何sql连接时,连接对象立即移动到池中?@Mou:答案是“这取决于”。你应该问一个新问题才能得到一个好答案。