PetaPoco利用ODP.NET Managed Driver连接Oracle

大概几年之前用PetaPoco做过一个Oracle的项目,开发的时候还需要安装oracle的client,非常麻烦。调试好环境后,一直到项目结束都不敢重装系统。最近又有一个需求需要读取oracle,可是环境已经没了……

再重新配置吧,先使用nuget下载安装了PetaPoco,没想到最新的版本变动比较大,貌似缺少几个类,时间紧急没时间折腾了,于是下载了一个旧版5.0.1。但是实在不想安装oracle client那么肥的东西,就想使用Oracle.DataAccess.dll来直接访问。

在App.config文件里添加数据库字符串:

<connectionStrings>

<add name="MyDbContext"

connectionString="Data Source=(DESCRIPTION=

(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))

(CONNECT_DATA=(SERVICE_NAME=ORCL)));

User Id=scott;Password=xxx;"

providerName="Oracle.DataAccess.Client"                />

</connectionStrings>

 

修改T4模板Database.tt的以下几个地方:

ConnectionStringName = "MyDbContext";            // Uses last connection string in config if not specified

Namespace = "Domain.Models";

RepoName = "MyDbContext";

 

保存,毫无疑问的报错了:

// -----------------------------------------------------------------------------------------

// Failed to load provider `Oracle.DataAccess.Client` - 找不到请求的 .Net Framework Data Provider。可能没有安装。

// -----------------------------------------------------------------------------------------

 

肯定还是驱动没装好,在搜索解决办法的时候,找到这两篇文章:

.NET Oracle Developer的福音——ODP.NET Managed正式推出

 

OracleODP.NET Managed 小试牛刀

 

原来Oracle已经推出了可托管的驱动,而且不区分32位还是64位了,这样应该就更方便了。Oracle官网上的下载简直要恶心死人。于是按照说明从nuget里搜索odp.net.managed:

安装后修改数据库连接字符串的provider:

providerName="Oracle.ManagedDataAccess.Client"

 

又报错了,还是相同的错误,找不到Oracle.ManagedDataAccess.Client这个驱动:

// -----------------------------------------------------------------------------------------

// Failed to load provider `Oracle.ManagedDataAccess.Client` - 找不到请求的 .Net Framework Data Provider。可能没有安装。

// -----------------------------------------------------------------------------------------

 

看来直接安装nuget还是不行啊,还是得老老实实上官网下,找到这个页面:

http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

一堆啊!!!下哪个啊???

我下的是这个:

解压缩之后里面有几个文件夹和dll,dll我们已经通过nuget安装了就不管了,里面有一个install_odpm.bat,看来是得安装一下了。直接运行,刷一下就没了,再运行还是刷一下就没了。

那就先开cmd吧。运行cmd找到这个bat,运行一下:

原来是不能直接运行的,还要加参数。按照第三种方式运行,又报错了:

看来需要启用管理员权限,使用管理员模式运行cmd,终于可以成功了。

打开这个bat可以看到其实就是copy了几个文件到系统目录,自动添加了tnsnames.ora这些文件。

再运行一下Database.tt,这次就报其他的错了:

// -----------------------------------------------------------------------------------------

// Failed to read database schema - ' user id' 是无效的连接字符串属性

// -----------------------------------------------------------------------------------------

 

看来驱动已经正常加载上了。那为什么报这个错呢?

找了半天原因,原来是数据库连接字符串不能有换行!否则PetaPoco的T4模板就读不到了……

 

还有,oracle官网最新的版本已经是12.1.0.2.4了,nuget上的版本貌似还没更新。

posted @   yan_xiaodi  阅读(2682)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示