私のセットアップでは、Visual Studio 2015 で構築された .NET アプリケーションがあり、Entity Framework 6 を使用して Oracle 12c データベースのデータにアクセスしようとしています。
これを達成するために私がしたことは次のとおりです。
- nuget を使用してOfficial Oracle ODP.NET、マネージド エンティティ フレームワーク ドライバー、およびその依存関係をインストールする方法について、oracle.com のチュートリアルに従いました。
- tnsnames.ora と sqlnet.ora が見つかることを確認しました。(環境変数 TNS_ADMIN が正しく構成されている)
- ここで実際に何が起こっているかを確認するために、Oracle ドライバーのトレース ログを有効にしました。
- いくつかのエンティティをマップする EDMX ファイルを作成しました (これには、以下で説明する回避策が既に必要です)
これが私の App.config の外観です (読みやすくするために導入された改行):
<oracle.manageddataaccess.client>
<version number="*">
<settings>
<setting name="TraceLevel" value="7" />
<setting name="TraceOption" value="0" />
<setting name="TraceFileLocation" value="C:\Temp" />
<setting name="TNS_ADMIN" value="c:\Temp\tns" />
</settings>
</version>
</oracle.manageddataaccess.client>
<connectionStrings>
<add name="MyModel"
connectionString="metadata=res://*/UDBModel.csdl|res://*/UDBModel.ssdl|res://*/UDBModel.msl;
provider=Oracle.ManagedDataAccess.Client;
provider connection string="User Id=*****;Password=*****;Data Source=MYDATASOURCE.WORLD;""
providerName="System.Data.EntityClient" />
データベースにアクセスしようとすると、これは例外で失敗します:
"ORA-12533: Netzwerksession: Syntaxfehler bei Verbindungstransportadresse"
オラクルのドキュメントによると、これは次のように変換されます
"ORA-12533: TNS: 無効な ADDRESS パラメータ"
トレース ログは、tnsnames.ora が正しく解決されたことを示しています。
TNS 名の代わりに IP アドレスとポートを使用すると、接続は正常に機能します。しかし、tnsnames.ora は当社のデータベース管理者によって管理されるため、IP アドレスを使用してサーバーのアドレスを指定することはできません。
また、古いドライバ (Oracle.DataAccess.dll など) は、この設定を使用してデータベースにアクセスしても問題ありません。
編集:私が現在使用している tnsnames.ora ファイルは次のとおりです。
MYDATASOURCE.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = MYDATASOURCE))
(ADDRESS = (COMMUNITY = TCP.world)(PROTOCOL = TCP)(Host = myds.example.com)(Port = 1530)))
(CONNECT_DATA = (SID = MYDATASOURCE))
)
ここで何が間違っていますか?
注: これに似た質問があります。ただし、その場合に役立つ解決策はここでは役に立ちませんでした。そこで発生した例外は、ここで発生したものとは異なります。