Добрый день!
Есть такая проблема: хочу использовать RFD в проекте, но необходимо, чтобы существовал единственный коннект к БД (надо для поддержки пессимистических блокировок на уровне БД), который бы открывался при инициализации приложения, а закрывался — при выходе из него.
Пишу такой singleton, который содержит единственный экземпляр класса DbManager:
public class ConnectionHolder: IDisposable
{
#region Variables
private DbManager _manager;
#endregion
#region Singleton
static readonly ConnectionHolder controllersHolderInstance = new ConnectionHolder();
public static ConnectionHolder Instance
{
get
{
return controllersHolderInstance;
}
}
#endregion
private ConnectionHolder()
{
_manager = new DbManager(DatabaseConnectionSettings.ConfigurationStringTemplate);
}
public DbManager Manager
{
get {return _manager;}
}
#region IDisposable Members
void Dispose(bool disposing)
{
_manager.Dispose();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~ConnectionHolder()
{
Dispose(false);
}
#endregion
}
а использовать хочу, например
tmp = ConnectionHolder.Instance.Manager.SetSpCommand(
SP_GetList).ExecuteList(typeof(DicRow));
при таком варианте использования при закрытии приложения вываливается exception в классе DbManager.cs
An unhandled exception of type 'System.InvalidOperationException' occurred in system.data.dll
Additional information: Handle is not initialized.
в методе Close тут
if (_connection != null && _closeConnection)
{
OnBeforeOperation(OperationType.CloseConnection);
_connection.Dispose();
OnAfterOperation (OperationType.CloseConnection);
_connection = null;
}
Как правильно использовать RFD в таком случае, чтобы гарантировать, что будет использоваться единственный коннект к БД?
Моя ConnectionString
"User ID={0};Password={1};Data Source={2};Initial Catalog={3};Min Pool Size=3;Max Pool Size=20;"
Заранее спасибо!
Avos
... << RSDN@Home 1.2.0 alpha rev. 616>>