私は自分のデータベースにうまく接続する App.config 接続文字列を持っています:
<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=micahs_poc_dev_server.kci;PASSWORD=kierkegaard;PERSIST SECURITY INFO=True;USER ID=KIERKEGAARD"" providerName="System.Data.EntityClient" />
ADO.NET / Linq to Entities アプローチと組み合わせて ODP 参照を使用しています。
ネットワーク上の別のデータベース (同じスキーマを持つ) に接続したいときに問題が発生します。
<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=QA_ETL_TEST_SERVER.COM;PASSWORD=bigshotpassword;PERSIST SECURITY INFO=True;USER ID=CoolidgeCalvin"" providerName="System.Data.EntityClient" />
サーバーの名前を変更すると、次のエラーが表示されます: ORA-00942: テーブルまたはビューが存在しません
例外をスローする前に、実際に数行のコードを実行できます。
using (SFEntities ctx1 = new SFEntities())
{
var ds = ctx1.Connection.DataSource; // debugger: QA_ETL_TEST_SERVER.COM
var db = ctx1.Connection.Database;
var dstate = ctx1.Connection.State;
var dsite = ctx1.Connection.Site;
ctx1.Connection.Open();
SF_CHANGE_ORDER cotest = new SF_CHANGE_ORDER();
cotest.DELETE_FLAG = "D";
var result = (from cp in ctx1.SF_CLIENT_PROJECT
select cp).ToList(); // <--- error here!
また、フォーマットを次のように変更してみました。
<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=(DESCRIPTION =(ADDRESS=(PROTOCOL=TCP)(HOST=155.32.75.11)(PORT=65550))(ADDRESS=(PROTOCOL=TCP)(HOST=155.32.75.11)(PORT=65550))(CONNECT_DATA=(SERVICE_NAME=QA_ETL_TEST_SERVER.COM)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))));PASSWORD=bigshotpassword;PERSIST SECURITY INFO=True;USER ID=CoolidgeCalvin"" providerName="System.Data.EntityClient" />
これは基本的に、このサーバー用に持っている TNS エントリを反映しています。「存在しません」というエラーが引き続き表示されます。
サーバー名を変なものにすると、サーバーが認識されないという TNS エラーが表示されます。したがって、必要なサーバー名を取得し、そこにあることを確認していると確信しています。
同じマシンから同じ資格情報 (および同じ TNS ファイル) を使用して両方のデータベースで問題なくクエリを実行できるため、テーブルのアクセス許可/作成の問題ではないと思います。
[注: 文字列の server/user/pw を変更しました]
[編集: フィドラーを起動しようとしましたが、メッセージが通過するのを見ませんでした]