O comprimento do valor da chave 'fonte de dados' excede o limite de '128'

Eu sei que uma pergunta muito semelhante foi feitaaqui, mas a resposta não me ajudou.

Estou usando o Entity Framework 6 com o Oracle.ManagerDataAccess.Client.

Se eu definir a cadeia de conexão em app.config, a conexão funcionará. Se eu especificar a cadeia de conexão idêntica no código, recebo o erro

The value's length for key 'data source' exceeds it's limit of '128'.

qual é correto.

Esta é a minha string de conexão (com alguns nomes removidos):

"User Id=xxxxxxxxxxx;Password=xxxx;Data Source=( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = (PROTOCOL = TCP)(HOST = VS-ORACLE.xxxxxxx.de)(PORT = 1521) ) ) ( CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl.xxxxxxxx.de) ) )"

Eu sei que há vários espaços que podem ser removidos, mas ainda não vou conseguir a string abaixo de 128 caracteres.

Como funciona quando a cadeia de conexão está no app.config, mas não quando está no código?

Existe algum truque que eu possa usar, transferindo alguns dos parâmetros para outra string?

Eu já estou usando um objeto DBConfiguration. Existe alguma maneira de definir alguns dos parâmetros nesse objeto?

Se eu usar o cliente oracle completo, acho que poderia fazer referência a uma configuração no arquivo tnsnames.ora, mas seria um ótimo bônus se pudéssemos conversar com um banco de dados oracle sem o cliente completo.

Atualizar

É assim que a string de conexão se parece em app.config

<connectionStrings>
  <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=xxxxxxxxxxx;Password=xxxx;Data Source=( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = (PROTOCOL = TCP)(HOST = VS-ORACLE.xxxxxxxx.de)(PORT = 1521) ) ) ( CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl.xxxxxxxx.de) ) )" />
</connectionStrings>

No código, defini a classe de contexto da seguinte maneira:

[DbConfigurationType(typeof(OracleDBConfiguration))]
public class GlobalAttributeContext : DbContext
{
  public DbSet<GlobalAttribute>  GlobalAttributes { get; set; }

  static GlobalAttributeContext()
  {
    Database.SetInitializer<GlobalAttributeContext>(null);
  }

  public GlobalAttributeContext(string nameOrConnectionString) : base(nameOrConnectionString)
  {
  }

  public GlobalAttributeContext() : this ( "Name=OracleDbContext" )
  {
  }

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    // We have to pass the schema name into the configuration. (Is there a better way?)
    modelBuilder.Configurations.Add(new GlobalAttribute_Config_Oracle("SchemaName")) ;
  }
}

Eu defini uma classe DbConfiguration da seguinte maneira:

class OracleDBConfiguration : DbConfiguration
{
  public OracleDBConfiguration()
  {
    this.SetDefaultConnectionFactory ( new System.Data.Entity.Infrastructure.LocalDbConnectionFactory("v12.0") ) ;
    this.SetProviderServices ( "Oracle.ManagedDataAccess.Client", Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices.Instance ) ;
    this.SetProviderFactory  ( "Oracle.ManagedDataAccess.Client", Oracle.ManagedDataAccess.Client.OracleClientFactory.Instance ) ;
  }
}

Por fim, crio o contexto como este

string ConnectionString = "User Id=xxxxxxxxxxx;Password=xxxx;Data Source=( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = (PROTOCOL = TCP)(HOST = VS-ORACLE.xxxxxxxx.de)(PORT = 1521) ) ) ( CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl.xxxxxxx.de) ) )" ;

using (var ctx = new GlobalAttributeContext(ConnectionString))
{
  var globalAttributes = ctx.GlobalAttributes.ToList() ;
  foreach ( GlobalAttribute ga in globalAttributes )
  {
    Console.WriteLine ( "Name: {0}, Value: {1}", ga.Attribute, ga.Value ) ;
  }
}

As cadeias de conexão usadas nos dois métodos são idênticas.

questionAnswers(2)

yourAnswerToTheQuestion