Управление подключением к базе данных в приложении asp.net - PullRequest
5 голосов
/ 17 марта 2009

Хотелось бы узнать, как лучше всего управлять соединением с базой данных в asp.net.

Мое приложение построено с использованием архитектуры N-уровня. DAL состоит из статических классов с такими методами, как

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

Здесь следует отметить, что я передаю соединение с DAL из BLL.

Вот пункты, которые я рассмотрел, но ни один из них не кажется мне подходящим, поэтому я просто прошу совета.

Должен ли я создать соединения в MasterPage, сохранить их в объекте, а затем передать их своим бизнес-объектам по мере их создания (то, чего я пытаюсь избежать)

Должен ли я создать соединение с использованием статического класса и вызвать для него метод, подобный CreateConnection, из конструктора моих бизнес-объектов (Что-то, что я хотел бы, но я не хочу иметь соединение для объекта, я Мне бы хотелось, чтобы он был общим для всех экземпляров моих объектов, но поскольку asp.net является многопоточным, статический класс не имеет смысла хранить соединения)

В идеале, решение должно также хорошо работать в среде Windows Forms (поэтому не нужно сохранять соединение в сеансе и извлекать его статическим методом в классе для текущего контекста)

1 Ответ

13 голосов
/ 17 марта 2009

Не пытайтесь сохранить соединение вообще. Внедрите его в каждую область, в которой вы его используете. .Net будет управлять пулом соединений для вас, в окнах или в asp.net.

Попытка удержать соединение является объектом сеанса или на главной странице на самом деле ухудшит производительность, не говоря уже о других проблемах.

Из комментария BC:

строки подключения должны быть равными строками, чтобы попасть в один и тот же пул.

...