偶尔在园子里看到.net的轻量级ORM框架Petapoco的介绍,觉得很有趣。相关介绍:PetaPoco:适用于.NET的微型ORM

正好最近有个C#+Oracle11g的项目,想趁此机会试试用petapoco来做数据层的框架。

在配置步骤和遇到的问题,记录如下。

1. 首先配置ODP.net,使得可以通过C#来连接Oracle。

配置ODP.net的方法请参考我之前的博客:C# 连接Oracle(利用ODP.net,不安装oracle客户端)

2. 安装Petapoco

安装Petapoco,首先得安装Nuget,可以通过VisualStudio2010的Extention Manager来搜索,并安装。

安装好后,打开Tools –> Library Package Manager –> Package Manager Console 如下图

在命令行后输入命令: PM> Install-Package petapoco就可以完成安装。

安装完后,工程里会多出一个Models文件夹和一些文件。其中的Database.tt就是用来自动生成poco的T4模板。

3. 利用Petapoco的Database.tt生成poco时的问题一:"Failed to load provider Oracle.DataAccess.Client”

一切准备好后,就在Database.tt中填写ConnectionStringName的名称,然后保存Database.tt,应该就自动生成Database.cs中的poco代码了。

Database.tt中修改的部分

app.config中ConnectionStringName的配置如下:

满以为可以很顺利的生成poco代码,结果事与愿违,保存Database.tt后出现了2个警告,Database.cs没有生成成功。

警告1(上图中选中的部分)很好改,只要将petapoco安装时生成的文件PetaPoco.Core.ttinclude的第一行

<#@ template language="C#v3.5" hostspecific="True" #>

修改为:<#@ template language="C#" hostspecific="True" #>

警告2就是那个"Failed to load provider Oracle.DataAccess.Client“的错误,几乎折腾了我一个晚上。

C#明明已经可以连上oracle并取得数据了,为什么T4模板生成poco时仍然说找不到Data Provider呢?

最后终于找到了原因:

原来我安装的ODP.net中的Oracle.DataAccess.dll是.net Framework2.0版本的,

因此Oracle.DataAccess相关的provider信息只在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG中的machine.config里面有记录。

在C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config中的machine.config里面没有记录。

而我测试用的工程是针对.net Framework4.0的WPF工程,因此在C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config中的machine.config里面没有找到相应的Provider信息。

于是我将~\v2.0.50727\CONFIG中的machine.config里面的Oracle.DataAccess相关的provider信息拷入~\v4.0.30319\Config中的machine.config的相应位置。

我的~\v4.0.30319\Config中的machine.config的相应信息如下:

<system.data><DbProviderFactories><add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/><add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342" /></DbProviderFactories>
</system.data>

上面Oracle Data Provider for .NET的信息是从~\v2.0.50727\CONFIG中的machine.config里拷出来的。

重启visualstudio2010后再保存Database.tt来生成poco。

警告变成了下面的"Failed to read database schema”

4. 利用Petapoco的Database.tt生成poco时的问题二:"Failed to read database schema”

Petapoco的T4模板总算可以连上oracle了,折腾了好长时间,试了网上的好多方法,总算找到原因了(machine.config的问题)。

对于"Failed to read database schema”,我觉得可能是Database.tt在Oracle11g上的一个bug。

修改起来也很简单,只要注释掉PetaPoco.Core.ttinclude中的两行即可。(大约是1164和1165行)

通过调试,发现上图中取出的rdr中并没有["TABLE_SCHEMA"]和["TABLE_TYPE"]的信息,所以生成poco时报错了。

将上面两行注释掉就可以生成poco了。

生成poco后,可以利用petapoco提供API,方便的操作数据库了。具体使用方法可以参考http://www.toptensoftware.com/petapoco/

PS. PetaPoco确实轻量,没有任何dll,只有一个PetaPoco.cs的源码文件。如果对性能要求比较苛刻,但又想使用ORM,那么PetaPoco是个很好的选择。

据说它的性能还能进一步提升,希望大家能关注一下它。

Petapoco 连接oracle11g 自动生成poco时遇到的问题相关推荐

  1. Word自动生成目录时,目录里出现正文的一段文字怎么解决

    出现的问题 在Word中引用自动生成目录时,目录中出现了正文中的一段文字 WORD里需要对标题进入格式化(应用样式),可以根据文件的结构来自定义标签的样式,定义好的标题的样式,WORD会自动进行索引排 ...

  2. Flowable6.8(6.x版本通用)整合集成达梦8数据库(DM8)详解,解决自动生成表时dmn相关表语法报错问题。

    Flowable集成达梦8数据库 相信大部分人都和我一样,以为只要换个数据源就可以了,起初我只更换了数据源,并开启了自动创建表功能. spring:datasource:url: jdbc:dm:// ...

  3. wpf datagrid自动生成列时特殊字符转换

    DataGrid控件可以根据DataTable自动生成行和列,但是如果列名包括一些特殊字符:'.','\','/','[',']','(',')'的时候,会出现无法显示出数据或者显示DataRowVi ...

  4. mybaits-plugs 连接orcale自动生成

    20200516 sh mybatis-plugs 是对mybatis框架进一步封装, 今天尝试使用mybatis-plugs的逆向工程连接 orcale/mysql数据库 生成实体类 以及dao 1 ...

  5. 【MyBatis】MyBatis自动生成代码之查询爬坑记

    前言 项目使用SSM框架搭建Web后台服务,前台后使用restful api,后台使用MyBatisGenerator自动生成代码,在前台使用关键字进行查询时,遇到了一些很宝贵的坑,现记录如下.为展示 ...

  6. 自动生成三层结构代码(3)--生成数据访问层Insert方法

    版权所有:基础软件.作者邮箱:sun.j.l.studio@gmail.com.本文首发于 http://www.cnblogs.com/FoundationSoft.文章转载请保持此版权信息并注明出 ...

  7. oracle11g 端口,navicate 连接 oracle11g精简版监听不到端口和用户密码错误问题

    navicate 连接 oracle11g精简版数据库时: 1.在navicate连接属性配置时,服务名或SID:XE 原因是: D:\oracle11g\app\oracle\product\11. ...

  8. word自动生成目录 页码不能右对齐问题

    在用word自动生成目录时,产生的目录总是不能右对齐,如下图 这时可以再生成目录对话框中修改相关选项来更正这个错误. 在引用->目录->插入目录的对话框中,<常规>--< ...

  9. Markdown 自动生成目录

    使用 CSDN 将鼠标光标放到要生成目录的位置,输入 [TOC] 即可 使用 VS Code Markdown 自动生成目录需要在 VS Code 中安装一个插件:Markdown All in On ...

最新文章

  1. Python计算两个numpy数组的交集(Intersection)实战:两个输入数组的交集并排序、获取交集元素及其索引、如果输入数组不是一维的,它们将被展平(flatten),然后计算交集
  2. Java List部分截取,获得指定长度子集合
  3. matlab ceil,matlab中的fix、round、floor、ceil的区别与含义
  4. iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例
  5. java参数类型不同_java – 两种不同的参数类型(将Object强制转换为Type)
  6. java集合框架之Collection
  7. Mac无损音乐播放器:Audirvana
  8. AE常见接口之间的关系+常见概念
  9. macd是什么意思,详析MACD是什么意思
  10. CP的mgmt_cli tool与SMC CLI用法
  11. [No0000134]C#中的委托,匿名方法和Lambda表达式
  12. 开源免费的Mac剪切板管理工具-Maccy
  13. passcode - pwnable
  14. [NLP比赛推荐]商品标题实体识别
  15. 二开版优化新紫色UI云开发新款壁纸小程序源码支持用户投稿在线审核
  16. 编程语言之时下潮流与实用价值
  17. ios 按钮文字下划线_iOS 文字下划线
  18. vant2-上拉加载、下拉刷新
  19. android Telephony学习 --- 第九篇 USSD简介
  20. 支付风控学习笔记(转载)

热门文章

  1. python如何创建不同元素的矩阵_python – 如何在数据帧中创建矩阵元素的数...
  2. html无序列表的滚动效果,html无序列表标签和有序列表标签使用示例
  3. Java项目:宿舍寝室维修上报管理系统(java+SpringBoot+FreeMarker+Mysql)
  4. JAVA 继承内存模型_Java内存模型
  5. php column not found,java.sql.SQLException: Column 'cloumn name' not found.
  6. 微信小程序用户未授权bug解决方法,微信小程序获取用户信息失败解决方法
  7. iOS 流式播放音频文件
  8. [学习笔记]最小割之最小点权覆盖最大点权独立集
  9. android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码...
  10. FZU 2297 Number theory【线段树/单点更新/思维】