У меня есть клиентское серверное приложение, использующее .NET Remoting.
У меня есть вспомогательный класс на серверной части моего приложения DBQuery.
DBQuery содержит DatabaseConnection и объект SQLCommand, Commander и выполняет переданные ему запросы.В приложении .NET Remoting для приложения должен быть статический объект подключения к базе данных
Каждый раз, когда выполняется запрос, он проверяет, что Commander имеет открытое соединение.
(при необходимости воссоздает Командующий.)
Учитывая, что он подключается только к одной базе данных, должен ли я сделать мой DBConnection статическим? (DBConnection создает командира, DBConnection.CreateCommand()
)
текущие свойства, определяемые ниже:
/// <summary> connection used for querying with </summary>
public DBConn DBConnection
{ get { return _conn ?? (_conn = new DBConn()); } }
/// <summary> Command object for processing the queries </summary>
private SqlCommand Commander
{
get
{
return _commander ??
(_commander = DBConnection.Connection.CreateCommand());
}
}
DBConn
- оборачивает SqlConnection
и подает соответствующую информацию о соединении с app.config
но не будет ли это результатом каждого запроса, используя его собственное соединение? Я предпочел бы привязать самое DB-соединение к жизненному DBQuery (таким образом, я могу повторно использовать 1 соединение для нескольких запросов.) Но есть ли «чистый» способ обойти это без того, чтобы обернуть ВСЕ использование DBQuery в 'using' блок? – Raystorm
, только если вы напишете код таким образом - нет ничего, что останавливало бы повторное использование одного и того же соединения для нескольких запросов. Что касается необходимости обойти «использование», зачем вам это нужно? Речь идет не об условности, а о правильном использовании объекта *. Посмотрите на Linq на SQl, Entity Framework и другие ORM - они почти все требуют использования шаблона 'use', потому что это * правильный * способ поговорить с базой данных. Правильная утилизация - это не просто тонкость - сам сервер должен знать, что вы сделали с ним, чтобы он мог обслуживать других клиентов на других БД –
, просто для ясных команд также реализуют IDisposable. –