Example #1
0
 private void ReleaseDatabase(ManagedLocalDb managedLocalDb)
 {
     _reservedDatabases.Remove(managedLocalDb.Name);
     Task.Run(() =>
     {
         EmptyOutDatase(managedLocalDb.Name);
         _managerConnection.ExecuteNonQuery(
             $"update {ManagerTableSchema.TableName} set {ManagerTableSchema.IsFree} = 1, {ManagerTableSchema.IsClean} = 1  where {ManagerTableSchema.DatabaseName} = '{managedLocalDb.Name}'");
     }
              );
 }
Example #2
0
        private bool TryReserveDatabase(out ManagedLocalDb databaseName)
        {
            databaseName = null;
            var freeDbs = GetDatabases().Where(db => db.IsFree).ToList();

            if (freeDbs.Any())
            {
                databaseName = freeDbs.First();
                ReserveDatabase(databaseName.Name);
                return(true);
            }
            return(false);
        }
Example #3
0
        public string CreateOrGetLocalDb(string requestedDbName)
        {
            Contract.Assert(!_disposed, "Attempt to use disposed object");
            ManagedLocalDb dbName;

            if (!_reservedDatabases.TryGetValue(requestedDbName, out dbName))
            {
                using (var transaction = new TransactionScope())
                {
                    if (TryReserveDatabase(out dbName))
                    {
                        _reservedDatabases.Add(requestedDbName, dbName);
                    }
                    else
                    {
                        // ReSharper disable once AssignNullToNotNullAttribute
                        var newDBName = $"TemporaryLocalDbManager_{Guid.NewGuid()}.mdf";
                        dbName = new ManagedLocalDb(newDBName, isEmpty: true, isFree: false, reservationDate: DateTime.UtcNow, connectionString: ConnectionStringForDbNamed(newDBName));

                        using (new TransactionScope(TransactionScopeOption.Suppress))
                        {
                            _masterConnection.ExecuteNonQuery($"CREATE DATABASE [{dbName.Name}]");
                        }

                        InsertDatabase(dbName.Name);

                        _reservedDatabases.Add(requestedDbName, dbName);
                    }
                    transaction.Complete();
                }
            }

            if (!dbName.IsEmpty)
            {
                EmptyOutDatase(dbName.Name);
            }


            return(_reservedDatabases[requestedDbName].ConnectionString);
        }
        public string CreateOrGetLocalDb(string requestedDbName)
        {
            Contract.Assert(!_disposed, "Attempt to use disposed object");
            ManagedLocalDb dbName;
            if(!_reservedDatabases.TryGetValue(requestedDbName, out dbName))
            {
                using(var transaction = new TransactionScope())
                {
                    if(TryReserveDatabase(out dbName))
                    {
                        _reservedDatabases.Add(requestedDbName,dbName);
                    }
                    else
                    {
                        // ReSharper disable once AssignNullToNotNullAttribute
                        var newDBName = $"TemporaryLocalDbManager_{Guid.NewGuid()}.mdf";
                        dbName = new ManagedLocalDb(newDBName, isEmpty:true, isFree:false, reservationDate:DateTime.UtcNow, connectionString: ConnectionStringForDbNamed(newDBName));

                        using(new TransactionScope(TransactionScopeOption.Suppress))
                        {
                            _masterConnection.ExecuteNonQuery($"CREATE DATABASE [{dbName.Name}]");
                        }

                        InsertDatabase(dbName.Name);

                        _reservedDatabases.Add(requestedDbName,dbName);
                    }
                    transaction.Complete();
                }
            }

            if(!dbName.IsEmpty)
            {
                EmptyOutDatase(dbName.Name);
            }


            return _reservedDatabases[requestedDbName].ConnectionString;
        }
 private void ReleaseDatabase(ManagedLocalDb managedLocalDb)
 {
     _reservedDatabases.Remove(managedLocalDb.Name);
     Task.Run(() =>
             {
                 EmptyOutDatase(managedLocalDb.Name);
                 _managerConnection.ExecuteNonQuery(
                     $"update {ManagerTableSchema.TableName} set {ManagerTableSchema.IsFree} = 1, {ManagerTableSchema.IsClean} = 1  where {ManagerTableSchema.DatabaseName} = '{managedLocalDb.Name}'");
             }
         );
 }
        private bool TryReserveDatabase(out ManagedLocalDb databaseName)
        {

            databaseName = null;
            var freeDbs = GetDatabases().Where(db => db.IsFree).ToList();
            if(freeDbs.Any())
            {
                databaseName = freeDbs.First();
                ReserveDatabase(databaseName.Name);
                return true;
            }
            return false;
        }