2009-03-17 11 views
5

Chciałbym wiedzieć, jaki byłby najlepszy sposób zarządzania połączeniem z bazą danych w asp.net.Zarządzanie połączeniem z bazą danych w aplikacji asp.net

Moja aplikacja jest zbudowana w oparciu o architekturę N-Tier. DAL składa się z klas statycznych metod, takich jak

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 

Punkt zauważyć tutaj, że mogę przekazać połączenie do DAL z BLL.

Oto punkty, które rozważałem, ale żaden z nich nie wydaje mi się w porządku, więc proszę o radę.

powinienem stworzyć połączenia w MasterPage, należy go przechowywać w obiekcie, a następnie przekazać je do mojego obiektów biznesowych jak je utworzyć (rzeczy staram się unikać)

należy utworzyć połączenie za pomocą klasy statycznej i wywoływanie na niej metody, na przykład CreateConnection, z konstruktora obiektów biznesowych (Coś, co chciałbym, ale nie chcę mieć połączenia z obiektem, chciałbym, aby było udostępniane dla wszystkich instancji z moich obiektów, ale ponieważ asp.net jest wielowątkowy, klasa statyczna nie ma sensu przechowywać połączeń)

Idealnie, rozwiązanie powinno również działać dobrze w środowisku Windows Forms (więc nie ma przechowywania połączeń w sessi włączanie i pobieranie statycznej metody w klasie w bieżącym kontekście)

+0

Udostępnianie tego samego połączenia w całej aplikacji nie zawsze jest dobrą praktyką. Pomyśl o stronie z setkami żądań na sekundę, wszystkie przechodzą przez to samo połączenie z bazą danych ... –

+0

Myślałem raczej o połączeniu na użytkownika, ale odpowiedź Neila N jest w porządku, to jest coś, o czym nie myślałem. – Martin

Odpowiedz

13

Nie próbuj w ogóle utrwalać połączenia. Utwórz instancję w każdym zasięgu, z którego go korzystasz. .Net będzie zarządzać pulą połączeń dla ciebie, w formularzach Windows lub asp.net.

Próba przytrzymania połączenia jest obiektem sesyjnym lub na stronie wzorcowej zaszkodzi wydajności, nie mówiąc już o wprowadzeniu innych problemów.

Od komentarzu BC:

ciągów połączenia muszą być równe struny do końca się w tej samej puli.

+1

Warto tutaj dodać, że ciągi połączeń muszą być równe łańcuchom, aby znaleźć się w tym samym basenie –

+0

cóż, nie myślałem o tym, to rozwiązanie pasuje do moich potrzeb i jest prostsze pod względem wzornictwa, podoba mi się:) – Martin

+0

Aha, i dzięki za szybką odpowiedź – Martin

Powiązane problemy