Saltar al contenido

obtener conexión db a través de la clase singleton

Solución:

Tu Singleton todavía está apagado.

En lo que respecta al patrón singleton, consulte la muy buena y detallada descripción de Jon Skeet aquí: http://www.yoda.arachsys.com/csharp/singleton.html

Usar un Singleton para un objeto SqlConnection es una muy, muy mala idea. No hay ninguna razón para hacer esto en absoluto.

Si está intentando evitar un impacto en el rendimiento de “new SqlConnection ()” o “connection.Open ()”, tenga en cuenta que realmente no hay ningún impacto en el rendimiento debido a la agrupación de conexiones que se produce entre bastidores. Connection Pooling maneja la apertura / cierre del costoso conexiones. No es el objeto SqlConnection.

No podrá abrir varios SqlDataReaders / Commands con la conexión al mismo tiempo y se encontrará con problemas de bloqueo de subprocesos si está intentando compartir el mismo objeto de conexión con varios subprocesos.

El patrón Singleton es el patrón más usado y abusado y hay muchos efectos secundarios del singleton que quizás no conozca. Muy buena charla sobre los peligros de los singletons aquí http://www.youtube.com/watch?v=-FRm3VPhseI

En .NET C # puedes escribir tu singleton así

    public class Singleton{
public static readonly Singleton Instance= new Singleton();
private Singleton(){}

o para entornos de subprocesos múltiples:

using System;

public sealed class Singleton
{
   private static volatile Singleton instance;
   private static object syncRoot = new Object();

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null) 
         {
            lock (syncRoot) 
            {
               if (instance == null) 
                  instance = new Singleton();
            }
         }

         return instance;
      }
   }
}

La conexión en sí no satisface los criterios de Singleton porque puede crear varias instancias de un objeto de conexión de base de datos. Un singleton, por definición, solo se puede instanciar una vez.

usted pueden hacer el SqlConnection una parte del Singleton, cambiando su ejemplo a esto:

public sealed class SingletonDB
{
    private static readonly SingletonDB instance = new SingletonDB();
    private readonly SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ConnectionString);

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static SingletonDB()
    {
    }

    private SingletonDB()
    {
    }

    public static SingletonDB Instance
    {
        get
        {
            return instance;
        }
    }

    public SqlConnection GetDBConnection()
    {
        return con;
    }
}

De esta manera el SqlConnection usado por tu SingletonDB la clase tendría uno y solo uno SqlConnection, por lo tanto, siga el patrón Singleton.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *