Длина значения для ключа «источник данных» превышает предел «128»
Я знаю, что был задан очень похожий вопросВот, но ответ не помог мне.
Я использую Entity Framework 6 с Oracle.ManagerDataAccess.Client.
Если я определяю строку подключения в app.config, то соединение работает. Если я укажу в коде одинаковую строку подключения, то получу ошибку
The value's length for key 'data source' exceeds it's limit of '128'.
что правильно.
Это моя строка подключения (некоторые имена удалены):
"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) ) )"
Я знаю, что есть куча пробелов, которые можно удалить, но я все еще не собираюсь опускать строку ниже 128 символов.
Почему это работает, когда строка подключения находится в app.config, но не в коде?
Есть ли какой-нибудь трюк, который я могу использовать, выгружая некоторые параметры в другую строку?
Я уже использую объект DBConfiguration. Есть ли способ установить некоторые параметры в этом объекте?
Если я использую полный клиент оракула, я думаю, что я мог бы ссылаться на конфигурацию в файле tnsnames.ora, но было бы большим плюсом, если бы мы могли общаться с базой данных оракула без полного клиента.
Обновить
Вот как выглядит строка подключения в 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>
В коде я определил класс контекста следующим образом:
[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")) ;
}
}
Я определил класс DbConfiguration следующим образом:
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 ) ;
}
}
Наконец, я создаю такой контекст
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 ) ;
}
}
Строки подключения, используемые в двух методах, идентичны.