2009-03-17 10 views
5

Mi piacerebbe sapere quale sarebbe il modo migliore per gestire una connessione a un database in asp.net.Gestione della connessione al database in un'applicazione asp.net

La mia applicazione è costruita utilizzando un'architettura N-Tier. La DAL consiste di classi statiche con metodi quali

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 

Il punto da notare qui, è che passo il collegamento al DAL dalla BLL.

Qui ci sono i punti che ho considerato, ma nessuno di loro sembra giusto per me, quindi sto solo chiedendo un consiglio.

Devo creare le connessioni nel MasterPage, conservarlo in un oggetto, poi passarlo ai miei oggetti di business come li creo (la cosa che sto cercando di evitare)

Devo creare una connessione utilizzando una classe statica e chiamando un metodo come CreateConnection su di esso, dal costruttore dei miei oggetti di business (Qualcosa che vorrei, ma non voglio avere una connessione per oggetto, mi piacerebbe che fosse condivisa per tutte le istanze dei miei oggetti, ma siccome asp.net è multi-thread, una classe statica non ha senso archiviare connessioni)

Idealmente, la soluzione dovrebbe funzionare bene anche in un ambiente Windows Form (quindi nessuna connessione memorizza in sessi attivo e recuperandolo con un metodo statico in una classe, per il contesto corrente)

+0

La condivisione della stessa connessione tra l'intera applicazione non è sempre una buona pratica. Pensa a un sito Web con centinaia di richieste al secondo, tutte con la stessa connessione al database ... –

+0

Stavo pensando a una connessione per utente, ma la risposta di Neil N è soddisfacente, è qualcosa a cui non avevo pensato. – Martin

risposta

13

Non tentare affatto di mantenere la connessione. Crea un'istanza all'interno di ogni ambito che stai utilizzando. .Net gestirà un pool di connessioni per te, sia in Windows Form o in Asp.net.

Provare a mantenere la connessione è un oggetto di sessione o in una pagina principale che in realtà danneggerà le prestazioni, per non parlare di introdurre altri problemi.

Dal commento di BC:

stringhe di connessione deve essere uguale stringhe di finire nello stesso pool.

+1

Vale la pena aggiungere qui che le stringhe di connessione devono essere stringhe uguali per finire nello stesso pool –

+0

beh, non ci ho pensato, questa soluzione si adatta alle mie esigenze, ed è più semplice in termini di design, mi piace:) – Martin

+0

Oh, e grazie per la risposta rapida – Martin

Problemi correlati