对现有 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" 方法。
以下是我遇到的问题。 在下结论之前请记住它们。
- 我有带有旧 ODP 驱动程序的 VS 2012。 VS 要求我升级。不能
- 我无法使用 EDM 生成图表和代码,因为我没有安装最新的 ODAC,也没有连接到 Oracle DB 的选项
- 如果我尝试对 EF 使用与 ADO.NET 正常工作的相同连接字符串,则会出现以下错误
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="data source=MY_SERVICE;password=MY_PASSWORD;persist security info=True;user id=MY_USERID""
providerName="System.Data.EntityClient" />
The entity type is not part of the model for the current
context.
我的问题。
- 是否有解决上述问题的方法。
- 有没有办法手动映射 Oracle 表、存储过程、函数等?
我知道以上没有多大意义,但这些是我的限制。我试图避免 Long/Old ADO.NET 代码。做不到也没关系。
提前感谢您的意见。
不太清楚你的问题是什么,因为像 "ODAC" 或 "ADO.NET" 这样的术语很含糊。
ODAC 是一个包含多个提供程序和驱动程序的软件包。请清楚说明供应商(例如 OraOLEDB.Oracle
或 MSDAORA
)和参考资料(例如 Oracle.DataAccess.Client
或 System.Data.OracleClient
),并告诉我们哪个有效或无效。
无论如何,您似乎在使用 ODP.NET Managed Provider (Oracle.ManagedDataAccess.Client
) 时遇到了问题,因此请专注于此。显然它没有找到 sqlnet.ora
和 ldap.ora
文件。
检查以下设置是否指向这些文件的正确位置:
- .NET 配置文件中
<oracle.manageddataaccess.client>
部分下的 dataSources
部分中的数据源别名。
tnsnames.ora
文件中的数据源别名,位于 .NET 配置文件中 TNS_ADMIN
指定的位置。位置可以由绝对或相对目录路径组成。
tnsnames.ora
文件中的数据源别名存在于与 .exe
. 相同的目录中
请注意,与其他提供商不同 ODP.NET Managed Provider 不会读取任何注册表设置并且不会读取环境变量。
已经有一个bug reported that ODP.NET Managed Provider does not resolve alias from LDAP, see this workaround:
我已经做了足够的研究,但找不到答案。
我有一个 Oracle 数据库,我正在使用我的 ADO.NET,它运行良好。但是,我想将它与 Entity Framework 6 一起使用。由于 DB 已经到位,因此我不会使用 "Code First" 方法。 以下是我遇到的问题。 在下结论之前请记住它们。
- 我有带有旧 ODP 驱动程序的 VS 2012。 VS 要求我升级。不能
- 我无法使用 EDM 生成图表和代码,因为我没有安装最新的 ODAC,也没有连接到 Oracle DB 的选项
- 如果我尝试对 EF 使用与 ADO.NET 正常工作的相同连接字符串,则会出现以下错误
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="data source=MY_SERVICE;password=MY_PASSWORD;persist security info=True;user id=MY_USERID""
providerName="System.Data.EntityClient" />
The entity type is not part of the model for the current context.
我的问题。
- 是否有解决上述问题的方法。
- 有没有办法手动映射 Oracle 表、存储过程、函数等?
我知道以上没有多大意义,但这些是我的限制。我试图避免 Long/Old ADO.NET 代码。做不到也没关系。
提前感谢您的意见。
不太清楚你的问题是什么,因为像 "ODAC" 或 "ADO.NET" 这样的术语很含糊。
ODAC 是一个包含多个提供程序和驱动程序的软件包。请清楚说明供应商(例如 OraOLEDB.Oracle
或 MSDAORA
)和参考资料(例如 Oracle.DataAccess.Client
或 System.Data.OracleClient
),并告诉我们哪个有效或无效。
无论如何,您似乎在使用 ODP.NET Managed Provider (Oracle.ManagedDataAccess.Client
) 时遇到了问题,因此请专注于此。显然它没有找到 sqlnet.ora
和 ldap.ora
文件。
检查以下设置是否指向这些文件的正确位置:
- .NET 配置文件中
<oracle.manageddataaccess.client>
部分下的dataSources
部分中的数据源别名。 tnsnames.ora
文件中的数据源别名,位于 .NET 配置文件中TNS_ADMIN
指定的位置。位置可以由绝对或相对目录路径组成。tnsnames.ora
文件中的数据源别名存在于与.exe
. 相同的目录中
请注意,与其他提供商不同 ODP.NET Managed Provider 不会读取任何注册表设置并且不会读取环境变量。
已经有一个bug reported that ODP.NET Managed Provider does not resolve alias from LDAP, see this workaround: