2009-03-17 11 views
5

Me gustaría saber cuál sería la mejor manera de administrar una conexión a una base de datos en asp.net.Administrar la conexión a la base de datos en una aplicación asp.net

Mi aplicación está construida usando una arquitectura N-Tier. El DAL consiste en clases estáticas con métodos tales como

Public Shared Sub Delete(_ 
    ByVal connection As MyConnectionClass, _ 
    ByVal contact_id As Integer, _ 
    ByVal contact_timestamp As Date _ 
) 

    With connection.ProcParams 
     .Add(New StoredProcParam("p_contact_id", contact_id, OracleDbType.Int32)) 
     .Add(New StoredProcParam("p_contact_timestamp", contact_timestamp, OracleDbType.Date)) 
    End With 

    connection.Execute("PKG_DATA_ACCESS.DeleteContact") 

End Sub 

El punto a señalar aquí, es que me pase la conexión con el DAL de la BLL.

Estos son los puntos que he considerado, pero ninguno de ellos me parece correcto, así que solo estoy pidiendo un consejo.

debo crear las conexiones en el MasterPage, almacenarlo en un objeto, y luego pasarlo a mis objetos de negocio como las creo (lo que estoy tratando de evitar)

Debería crear una conexión mediante una clase estática y llamando a un método como CreateConnection, desde el constructor de mis objetos comerciales (algo que me gustaría, pero no quiero tener una conexión por objeto, me gustaría que se compartiera para todas las instancias) de mis objetos, pero como asp.net tiene varios subprocesos, una clase estática no tiene sentido para almacenar conexiones)

Idealmente, la solución también debería funcionar bien en un entorno de Windows Forms (por lo que no se almacena la conexión en sessi on, y recuperarlo con un método estático en una clase, para el contexto actual)

+0

Compartir la misma conexión en toda la aplicación no siempre es una buena práctica. Piensa en un sitio web con cientos de solicitudes por segundo, todas pasando por la misma conexión a la base de datos ... –

+0

Estaba pensando más en una conexión por usuario, pero la respuesta de Neil N está bien, es algo en lo que no había pensado. – Martin

Respuesta

13

No intente mantener la conexión en absoluto. Crear una instancia dentro de cada ámbito que lo está utilizando. .Net administrará un conjunto de conexiones para usted, ya sea en formularios Windows o en asp.net.

Tratar de mantener la conexión es un objeto de sesión o en una página maestra en realidad perjudicará el rendimiento, sin mencionar introducir otros problemas.

Desde el comentario de BC:

cadenas de conexión debe ser igual cadenas para terminar en la misma piscina.

+1

Vale la pena agregar aquí que las cadenas de conexión deben ser cadenas iguales para terminar en el mismo grupo –

+0

bien, no pensé en eso, esta solución se ajusta a mis necesidades, y es más simple en términos de diseño, me gusta:) – Martin

+0

Ah, y gracias por la respuesta rápida – Martin

Cuestiones relacionadas