0

私は自分のデータベースにうまく接続する App.config 接続文字列を持っています:

<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;DATA SOURCE=micahs_poc_dev_server.kci;PASSWORD=kierkegaard;PERSIST SECURITY INFO=True;USER ID=KIERKEGAARD&quot;" 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=&quot;DATA SOURCE=QA_ETL_TEST_SERVER.COM;PASSWORD=bigshotpassword;PERSIST SECURITY INFO=True;USER ID=CoolidgeCalvin&quot;" 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=&quot;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&quot;" providerName="System.Data.EntityClient" />

これは基本的に、このサーバー用に持っている TNS エントリを反映しています。「存在しません」というエラーが引き続き表示されます。

サーバー名を変なものにすると、サーバーが認識されないという TNS エラーが表示されます。したがって、必要なサーバー名を取得し、そこにあることを確認していると確信しています。

同じマシンから同じ資格情報 (および同じ TNS ファイル) を使用して両方のデータベースで問題なくクエリを実行できるため、テーブルのアクセス許可/作成の問題ではないと思います。

[注: 文字列の server/user/pw を変更しました]

[編集: フィドラーを起動しようとしましたが、メッセージが通過するのを見ませんでした]

4

1 に答える 1

0

ああ... VisualStudio は Model .edmx ファイルにスキーマ名を隠します。これを機能させるには、何らかの方法でモデル ファイルを開き (メモ帳を使用するか、プロジェクト内のすべてのドキュメントを検索します)、スキーマ名を手動で変更する必要があります。ブー!

于 2012-10-29T19:12:56.900 に答える