对现有 ORACLE 数据库使用 Entity Framework。 Visual Studio 2012 和弃用的 ODP.NET 驱动程序

Use Entity Framework with existing ORACLE DB. Visual Studio 2012 and Deprecated ODP.NET Driver

我已经做了足够的研究,但找不到答案。

我有一个 Oracle 数据库,我正在使用我的 ADO.NET,它运行良好。但是,我想将它与 Entity Framework 6 一起使用。由于 DB 已经到位,因此我不会使用 "Code First" 方法。 以下是我遇到的问题。 在下结论之前请记住它们。

ORA-12154: TNS:could not resolve the connect identifier specified

注意我正在使用 LDAP 连接到 Oracle 数据库。

我也试过生成一个空的 EDM 并添加了一个新的连接字符串,然后我得到了一个不同的错误。

<add name="EF" connectionString="metadata=res://*/Model1.csdl
                                |res://*/Model1.ssdl
                                |res://*/Model1.msl;
                                provider=Oracle.ManagedDataAccess.Client;
                                provider connection string=&quot;data source=MY_SERVICE;password=MY_PASSWORD;persist security info=True;user id=MY_USERID&quot;"
                                providerName="System.Data.EntityClient" />

The entity type is not part of the model for the current context.

我的问题。

我知道以上没有多大意义,但这些是我的限制。我试图避免 Long/Old ADO.NET 代码。做不到也没关系。

提前感谢您的意见。

不太清楚你的问题是什么,因为像 "ODAC" 或 "ADO.NET" 这样的术语很含糊。

ODAC 是一个包含多个提供程序和驱动程序的软件包。请清楚说明供应商(例如 OraOLEDB.OracleMSDAORA)和参考资料(例如 Oracle.DataAccess.ClientSystem.Data.OracleClient),并告诉我们哪个有效或无效。

无论如何,您似乎在使用 ODP.NET Managed Provider (Oracle.ManagedDataAccess.Client) 时遇到了问题,因此请专注于此。显然它没有找到 sqlnet.oraldap.ora 文件。

检查以下设置是否指向这些文件的正确位置:

  1. .NET 配置文件中 <oracle.manageddataaccess.client> 部分下的 dataSources 部分中的数据源别名。
  2. tnsnames.ora 文件中的数据源别名,位于 .NET 配置文件中 TNS_ADMIN 指定的位置。位置可以由绝对或相对目录路径组成。
  3. tnsnames.ora 文件中的数据源别名存在于与 .exe.
  4. 相同的目录中

请注意,与其他提供商不同 ODP.NET Managed Provider 不会读取任何注册表设置并且不会读取环境变量。

已经有一个bug reported that ODP.NET Managed Provider does not resolve alias from LDAP, see this workaround: