Ich weiß, dass eine sehr ähnliche Frage wurde here gestellt, aber die Antwort hat mir nicht geholfen.Die Länge des Werts für den Schlüssel 'Datenquelle' überschreitet seine Grenze von '128'
Ich verwende Entity Framework 6 mit dem Oracle.ManagerDataAccess.Client.
Wenn ich die Verbindungszeichenfolge in app.config definieren, funktioniert die Verbindung. Wenn ich die gleiche Verbindungszeichenfolge im Code angeben, dann erhalte ich die Fehler
The value's length for key 'data source' exceeds it's limit of '128'.
was richtig ist.
Dies ist meine Verbindungszeichenfolge (mit einigen entfernt Namen):
"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)))"
Ich weiß, dass es eine Reihe von Räumen ist, die entfernt werden können, aber ich werde immer noch nicht die Zeichenfolge unten 128 erhalten Figuren.
Wie funktioniert es, wenn die Verbindungszeichenfolge in app.config ist, aber nicht, wenn es in Code ist?
Gibt es einen Trick, den ich verwenden kann, indem ich einige der Parameter auf einen anderen String verlagern?
Ich verwende bereits ein DBConfiguration-Objekt. Gibt es eine Möglichkeit, einige der Parameter in diesem Objekt zu setzen?
Wenn ich den vollständigen Oracle-Client verwende, denke ich, dass ich eine Konfiguration in der Datei tnsnames.ora referenzieren könnte, aber es wäre ein großer Bonus, wenn wir mit einer Oracle-Datenbank ohne den vollständigen Client sprechen könnten.
aktualisieren
Dies ist, was die Verbindungszeichenfolge wie app.config in aussieht
<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>
In Code, den ich die Kontextklasse definiert sich wie folgt:
[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")) ;
}
}
Ich habe definiert eine DbConfiguration-Klasse wie folgt:
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) ;
}
}
Schließlich schaffe ich den Kontext ähnliche
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) ;
}
}
die Verbindungszeichenfolgen in den beiden Verfahren verwendet werden, sind identisch.
Wie stellen Sie die Verbindungszeichenfolge im Code ein? Ich habe diesen Fehler nie zuvor bei Verbindungszeichenfolgen gesehen. – bhmahler
Ich habe weitere Informationen hinzugefügt. –