当前位置: 首页 > 编程日记 > 正文

Petapoco 连接oracle11g 自动生成poco时遇到的问题

偶尔在园子里看到.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来搜索,并安装。

image

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

image

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

image

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

image

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

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

Database.tt中修改的部分

image

app.config中ConnectionStringName的配置如下:

image

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

image

警告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行)

image

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

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

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

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

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

相关文章:

网页分享插件 share.js 国外常用

这两天做推广&#xff0c;要求实现页面分享到国外各大社交媒体的功能。自己去翻各大厂的文档的话&#xff0c;实现起来时间相当长。 github 上找了个插件&#xff0c;很6. 地址&#xff1a; https://github.com/ellisonleao/sharer.js 支持主流的国外的社交媒体的分享。 主要支…

ORM操作models一对多、多对多关系

ORM操作 单表、一对多表操作 1 from django.db import models2 3 4 class UserGroup(models.Model):5 title models.CharField(max_length32)6 7 8 class UserInfo(models.Model):9 username models.CharField(max_length32) 10 password models.CharField(max…

【基础知识】如何快速转发CSDN博客

使用&#xff1a;火狐浏览器、Markdown编辑器 一、打开要转发的博客、按F12并点击查看器 二、复制页面的代码&#xff08;此处用到一个小技巧&#xff09; 1、鼠标点击该按钮 2、将鼠标放到图示位置&#xff0c;使变色的位置覆盖所有博客的内容后点击鼠标左键 3、看到下方代码…

SQLServer 系统表

SQLServer 系统表 http://blog.163.com/zangyunling126/blog/static/1646245052010101641620415/ http://www.cnblogs.com/yolion/archive/2007/10/08/916767.html SQL系统表说明 http://hi.baidu.com/etimeman/blog/item/3d5d82fc09bbfff8fc037fae.html SQLServer系统表详细说…

c#之旅--第一天

昨天开始的第一篇博客被我这个菜鸟找不到了&#xff0c;那就从今天开始吧废话也不多说了&#xff0c;good good study, day day up! 首先总结一下昨天所学&#xff1a; 从程序的开头开始吧&#xff0c;首先是引用&#xff0c;这里总结一下using的用法&#xff1a;1,。将外部命名…

第十一周总结CoreIDRAW

一、学到了什么&#xff1f; 1、交互式工具为制作逼真的特效提供了基础&#xff0c;如交互式调和工具常用于制作逼真的过滤效果&#xff1b;交互式阴影工具用于制作逼真的阴影&#xff1b;而交互式透明工具用于制作逼真的高光效果。 2、利用这些工具做了232页实训——画册制作和…

formatData

//解决传入0 格化后不返回空的问题function formatAmountValueNew(objValue,flag) { if(objValue!"" && objValue!null) { if(flag0) { // 验证输入金额数值或数值字符串&#xff1a; return objValue.toString().replace(/,/g, "");…

【java】将自己写的类生成说明文档的方法

使用工具&#xff1a; jdk中的javadoc 实现步骤&#xff1a; 1、将java文件放到一个目录之下 2、进入doc(winR,输入cmd) 3、通过cd指令进入存放java文件的文件夹 4、编译java文件 代码实现&#xff1a; javac HelloWorld.java 注&#xff1a; &#xff08;1&#xff09…

Scrapy和MongoDB的应用

Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取Web站点并从页面中提取结构化的数据.它最吸引人的地方在于任何人都可以根据需求方便的修改。 MongoDB是现下非常流行的开源的非关系型数据库&#xff08;NoSql&#xff09;&#xff0c;它是以“key-value…

linux bunzip2命令

Linux命令&#xff1a;bunzip2 功能说明&#xff1a;.bz2文件的解压缩程序。 语 法&#xff1a;bunzip2 [-fkLsvV][.bz2压缩文件] 补充说明&#xff1a;bunzip2可解压缩.bz2格式的压缩文件。bunzip2实际上是bzip2的符号连接&#xff0c;执行bunzip2与bzip2 - d的效果相同。 参…

[C++]C++中的IO类

C中的IO类 C语言不直接处理输入输出&#xff0c;而是通过一组定义在标准库中的类型来处理IO。这些类型支持从设备读取数据&#xff0c;向设备写入数据的IO操作&#xff0c;设备可以是文件&#xff0c;控制台窗口等。还有一些类型允许内存IO&#xff0c;即从string读取数据&…

solr 3.5 配置及服务器设置

一、solr 的简介 Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。Apache Solr 中存储的资源是以 Document 为对象进行存储的。每个文档由一系列的 Field 构成&#xff0c;每个 Field 表示资源的一个属性。Solr…

【基础知识】截长图的方法以及防止截图时下拉框自动收回的方法

截长图的方法&#xff1a; 博主之前使用的tim&#xff0c;不具备截长图的功能&#xff0c;之后百度了很多的方法&#xff0c;最后发现QQ的截长图功能最好用&#xff0c;很不解&#xff0c;tim不应该是偏向于办公吗&#xff0c;这种功能竟然还能阉割&#xff1f; 使用工具&#…

IFeature接口

用于设置一个要素的属性&#xff1a; 转载于:https://www.cnblogs.com/dengshiwei/p/4258741.html

IBM公司新推一个基于云计算的Web分析工具

据外媒报道&#xff0c;IBM最新推出了一个Web分析工具&#xff0c;结合了其现有的基于B/S架构的专业数据度量和分析工具 CoreMetrics和营销分析服务Unica。IBM在去年耗资4.8亿美元收购Unica&#xff0c;帮助企业分析客户数据&#xff0c;并预测他们的需求和行 动&#xff0c;Un…

【leetcode 字符串】466. Count The Repetitions

https://leetcode.com/problems/count-the-repetitions/description/ 找循环节 https://www.cnblogs.com/grandyang/p/6149294.html转载于:https://www.cnblogs.com/itcsl/p/9061427.html

TS - 处理故障的一些通用方法

本文是对解决问题的一些方法内容的改写与补充&#xff01; 首要的问题 对于发生在线上的问题&#xff0c; 最紧要的事项一定是“以最快最有效的方式解决问题&#xff0c;降低对线上业务的影响”&#xff0c;然后才是深挖问题&#xff0c;探求根本原因&#xff0c;防微杜渐&…

javascript读取XML文档

xml <?xml version"1.0" encoding"utf-8"?> <Menus> <Menu id"0" name"首页"> <MenuItemTitle sid"01" mid"0" name"常用选项"> <MenuItem mid"0" tid"0…

设计模式读书笔记-单件模式

单件模式- 确保一个类只有一个实例&#xff0c;全局只有一个入口点。 类如下: public class Singleton { private static Singleton uniqueInstance; // other useful instance variables here private Singleton() {} public static Singleton getInstance() { if (uniqueInst…

2.1 mac下多版本jdk的安装和管理

之前已经安装过jdk8了&#xff0c;安装路径&#xff1a;/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk 现在安装jdk10&#xff0c;下载后&#xff0c;双击dmg文件一直到安装完成&#xff0c;安装路径&#xff1a;/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk 安装…

python多进程详解

目录 python多进程序.multiprocessing一、Processprocess介绍例1.1&#xff1a;创建函数并将其作为单个进程例1.2&#xff1a;创建函数并将其作为多个进程例1.3&#xff1a;将进程定义为类例1.4&#xff1a;daemon程序对比结果二、Lock三、Semaphore四、Event五、Queue六、Pipe…

【工具软件】webstorm的实用快捷操作(持续积累)

博主目前正在做前端的开发&#xff0c;使用到了一个十分实用的软件叫webstom&#xff0c;昨天做了一个破解教程的博客&#xff0c;但是审核没有通过&#xff0c;有兴趣的朋友可以私信我。webstom的实用之处就在于它数不胜数的快捷操作大大简化了写代码的繁琐步骤。但是那么多的…

无线Trace脚本(旧格式)-平均延时

BEGIN {#程序初始化&#xff0c;设定一变量以记录目前处理的封包的最大ID号码。在awk环境下变量的使用不需要声明&#xff0c;直接赋值。highest_uid 0;total_packet0;total_delay_time0; } #下面大括号里面的内容会针对要进行处理的记录&#xff08;也就是我们的trace文件&am…

友元函数、类的非静态成员函数、静态成员函数的区别

类中申明的函数相对于类来说有三层意思&#xff1a;1.有this指针2.函数在类的作用区域中3.可以访问类中私有部分 4.可以被继承非静态成员函数具有1234静态成员函数具有234友元函数具有3静态成员函数与友元函数的区别只是作用区域的不同 友元函数具有全局性 不慎使用可能会造成函…

【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法

c的小细节的地方 原文地址&#xff1a;https://blog.csdn.net/xiaosu123/article/details/5665729 问题描述如下&#xff1a; 有 三个源文件&#xff0c;A.h、B.cpp、C.cpp。 A.h是头文件&#xff0c;其中声明了三个变量a1、a2、 a3。 B.cpp是A.h中所声明的类的实现源代码&…

【jQuery】jQuery知识点梳理(持续更新)

jQuery是什么&#xff1a; 由图标可知&#xff1a; j&#xff1a;JavaScript query&#xff1a;查询 所以可以分析得jQuery是一个JavaScript库&#xff0c;而且主要用来查询。 注意&#xff0c;下面的一行小字&#xff0c;write less do more 我们不仅可以看出jQuery以高效…

Python - 在CentOS7.5系统中安装Python3

注意&#xff1a;以下内容均使用root用户执行操作。 1-确认信息 # uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux # # cat /etc/system-release CentOS Linux release 7.5.1804 (Core) # …

JQuery 基础:8.节点操作

1.replaceWith替换节点 $("br").replaceWith("<hr/>"); 2.wrap()包裹节点,将元素逐个用指定标签包裹 $("b").wrap("<font colorred></font>")转载于:https://www.cnblogs.com/xyangs/archive/2012/05/22/2513821.ht…

《CLR Via C# 第3版》笔记之(十四) - 泛型高级

为了更好的利用泛型&#xff0c;现将泛型的一些高级特性总结一下。 主要内容&#xff1a; 泛型的协变和逆变泛型的参数的约束1. 泛型的协变和逆变 对于泛型参数(一般用T表示)&#xff0c;指定了类型之后。就只能识别此类型&#xff0c;面向对象中的继承并不适用泛型参数&#x…