非常によく似た質問がhereと尋ねられましたが、その答えが私を助けませんでした。キー 'データソース'の値の長さが '128'の制限を超えています
私はOracle.ManagerDataAccess.ClientでEntity Framework 6を使用しています。
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オブジェクトを使用しています。そのオブジェクトのいくつかのパラメータを設定する方法はありますか?
完全なoracleクライアントを使用している場合は、tnsnames.oraファイルで構成を参照できると思いますが、フル・クライアントなしでoracleデータベースと通信できる場合は大きな利点になります。
[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")) ;
}
}
私が持っている:
アップデートは
これは、接続文字列は次のように私はコンテキストクラスを定義しているコードで
<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>
app.configをで次のようになります次のように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) ;
}
}
は最後に、私は2つの方法で使用される接続文字列が同一である。この
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) ;
}
}
のようなコンテキストを作成します。
コードで接続文字列をどのように設定していますか?以前は接続文字列でこのエラーを見たことがありません。 – bhmahler
私はより多くの情報を追加しました。 –