一次Oracle 11g+FluentNHibernate AutoMapping组合尝试

本文的上下文环境

操作系统:Win7 x64 Ultimate
开发工具:Visual Studio 2013

一、前言

  在以前开发的大多数场景下,使用的开发语言是C#,使用的数据库是Sql Server,这样的组合,必然少不了Entity Framework这样的ORM,自从习惯了Entity Framework,就甩不掉了。这次因为一些历史原因,数据库必须用Oracle,其实,我不太喜欢Oracle,这样的数据库给我的印象是使用起来,无论是安装客户端,配置连接,都太费劲了。

  有些事情,你还真得硬着头皮去尝试,你不去做,永远都不会明白。因为我之前的项目Entity Framewor +Sql Server是比较常用的,所以对Entity Framework这样的ORM已经很熟悉了,Entity Framework的DataBase First和Model First,使用的时候,总会遇到一些问题,比如表字段的维护,只能通过设计器,更新,如果表很多的话,设计器显示很慢,更新还经常出错,所以我一直都是用Code First。这次既然是Oracle,我以为很简单,换个引用或连接串就行了(如果以后东西真的这样就好了)。

二、ODP.Net安装

  首先搜索一番,知道有个ODP.Net,官方介绍:Oracle Data Provider for .NET (ODP.NET) features optimized ADO.NET data access to the Oracle database. ODP.NET allows developers to take advantage of advanced Oracle database functionality, including Real Application Clusters, XML DB, and advanced security. The data provider can be used with the latest .NET Framework 4.5.1 version。这个ODP.Net其实和微软的System.Data.OracleClient一样,都是提供对Oracle数据库访问的驱动,不过ODP.Net是Oracle自己开发的,可能有些人会以为,项目中换下引用就行了,其实一开始我也这么认为,之后查了些资料才明白,System.Data.OracleClient用的是Oracle的“最小驱动”,使用的时候应该是不需要安装Oracle客户端的,本人没有实践过,使用过的朋友可以帮忙证明下。之后看了System.Data.OracleClient Namespace的介绍:The System.Data.OracleClient namespace is the .NET Framework Data Provider for Oracle.This types in System.Data.OracleClient are deprecated and will be removed in a future version of the .NET Framework. For more information, see Oracle and ADO.NET.这个我看到最重要的是System.Data.OracleClient已deprecated,在将来的 .Net Framework里就看不到了。所以,现在最好是用ODP.Net。

  

  首先要下载ODP.Net,这个要和Oracle服务器端的版本相对应,我用的是Oracle 11g,所以下载了ODAC1120320Xcopy_32bit,我的操作系统是x64的,可以下载32位和64位的,一开始下载了64位的,但是在IIS 7.5里运行网站的时候,提示”Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.",所以我下载了32位的,如果IIS 7.5里的Advanced Setting下Enable 32-Bit Applications设为True,就能正常运行了,64位下如果Enable 32-Bit Applications设为False估计也行,对于ODP.Net的安装,这里面有详细的介绍,正确安装相当重要。

  

  Oracle的这部分完成了,下面就是ORM的选择了,解压ODP.Net后,在odp.net4\odp.net\doc里看到一个readme.htm,打开仔细阅读,看到这条“ODP.NET 11.2.0.3 does not support Code First nor the DbContext APIs.“瞬间就被震住了。之后在Oracle Community看到社区管理员的回答ODP.NET does not support EF Code First yet. For the next ODP.NET release (ODAC 12c Release 3), Oracle plans to support this feature. The plan is to release sometime in 2014.我只感到这大Oracle的反应真够慢的。所以,只能放弃Entity Framework了,听朋友推荐说可以用Fluent NHibernate。

三、Fluent NHibernate配置

  所以决定try,在VS2013里引用FluentNHibernate,Install-Package FluentNHibernate -Version 1.4.0,目前是最新版。接下来就是基础搭建了。
由于在继承ClassMap的那种方式下,一个数据库表会写2个实体,感觉太麻烦了,我这里用的是AutoMapping,实体和数据库表一一对应,没有考虑多表关联问题。

首先是个DBContext:

 

接下来是一张和数据库表Product相对应的实体:

接下来是映射关系:

指定主键的生成方式:(这里用的是自己手动赋值,就是在保存的时候,调用DBContext里的GenerateID()方法)

四、测试

ps:由于是事后之作,没有来得及整理demo,没有完整代码下载,Hope it can help you.

引用阅读:

http://www.oracle.com/technetwork/topics/dotnet/index-085163.html
http://dba.stackexchange.com/questions/44470/why-oracle-sql-developer-does-not-need-oracle-client
http://msdn.microsoft.com/en-us/library/system.data.oracleclient(v=vs.110).aspx 
http://www.thebestcsharpprogrammerintheworld.com/blogs/connect-to-an-oracle-database-without-an-oracle-client.aspxhttp://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

本文基于署名 GPL 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名lhking(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

 

Oracle 11g+FluentNHibernate AutoMapping组合尝试的更多相关文章

  1. 一次Oracle 11g+FluentNHibernate AutoMapping组合尝试

    本文的上下文环境 操作系统:Win7 x64 Ultimate开发工具:Visual Studio 2013 一.前言 在以前开发的大多数场景下,使用的开发语言是C#,使用的数据库是Sql Serve ...

  2. oracle 11g 如何创建、修改、删除list-list组合分区

    Oracle11g在分区方面做了很大的提高,不但新增了4种复合分区类型,还增加了虚拟列分区.系统分区.INTERVAL分区等功能. 9i开始,Oracle就包括了2种复合分区,RANGE-HASH和R ...

  3. PowerDesginer 生成的Oracle 11g 组合触发器代码编译错误(29): PLS-00103

    问题描述: 采用PowerDesigner15针对Oracle 11g 创建物理数据模型,想实现一个字段的自增,采用如下步骤: 1.创建序列,命名为Sequence_1; 2.在自增字段编辑窗口中,选 ...

  4. Oracle 11g新特性

    文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...

  5. Oracle 11g 物理Dataguard日常操作维护(二)

    Oracle 11g 物理Dataguard日常操作维护(二) 2017年8月25日 14:34 3.3 3.3.1 查看备库进程状态 SYS(125_7)@fpyj123> select pr ...

  6. PL/SQL Developer连接本地Oracle 11g 64位数据库

    转摘:http://www.cnblogs.com/ymj126/p/3712727.html 用于学习,笔记,以备后用. 1.登录PL/SQL Developer 这里省略Oracle数据库和PL/ ...

  7. Oracle 11g RAC 卸载CRS步骤

    Oracle 11g之后提供了卸载grid和database的脚本,可以卸载的比较干净,不需要手动删除crs ##########如果要卸载RAC,需要先使用dbca删除数据库,在执行下面的操作### ...

  8. Oracle 11g中修改默认密码过期天数和锁定次数

    Oracle 11g中修改默认密码过期天数和锁定次数 密码过期的原因一般有两种可能: 一.由于Oracle中默认在default概要文件中设置了"PASSWORD_LIFE_TIME=180 ...

  9. Oracle 11g密码过期问题解决方案

    [问题描述]近日,使用sqlplus登陆短消息Oracle(Oracle培训 )数据库时提示“ORA-28000: 帐号被锁定”.[原因/触发因素]确定是由于oracle11g中默认在default概 ...

随机推荐

  1. 关于java socket(转)

    1. 关于new Socket()中参数的理解 Server端: 调用ServerSocket serverSocket = new ServerSocket(1287,2);后Server端打开了指 ...

  2. 半平面交总结and模板

    博客原文地址:http://blog.csdn.net/xuechelingxiao/article/details/40859973 这两天刷了POJ上几道半平面交,对半平面交有了初步的体会,感觉半 ...

  3. HDU 4916 Count on the path

    意甲冠军: 考虑到一棵树,m询价  不要求回答每一次询价u和v通过在两个节点形成的最低等级点路径 思路: 一開始以为是LCA-  只是T了好几次-  后来发现不用LCA也可做 考虑每一个询问u和v   ...

  4. 很酷的CSS3仿Facebook登录表单

    原文:很酷的CSS3仿Facebook登录表单 今天看到一款很不错的CSS3登录表单,外观是仿Facebook的登录表单,还挺不错的,另外也支持简单的表单输入框验证.下图是表单的效果图: 我们也可以在 ...

  5. KMP算法之从next[]到nextVal[] (转)

    前些日子写了一篇KMP算法的博文,浅谈数据结构之KMP(串中的模式匹配算法),在这片文章中,谈到了一个模式串K值的记录数组 next[],详细可看那篇文章,其实,前面定义的next[]数组是有一定缺陷 ...

  6. ArcGIS 10.1 for Server 扩展开发(SOE)

    原文连接:http://blog.csdn.net/arcgisserver_book/article/details/7869368 第一章为什么使用SOE 在ArcGIS 10.1中ArcGIS ...

  7. 第21章 策略模式(Strategy Pattern)

    原文 第21章 策略模式(Strategy Pattern) 策略模式 导读:策略模式看完之后,大多数人都会感觉有点混了,包括我,感觉策略模式是一种OO思想的体现(纯属个人拙见). 概述:       ...

  8. hive union all 使用

    功能:将两个表中的 同样的字段拼接到一起 測试: create external table IF NOT EXISTS temp_uniontest_ta ( a1 string, a2 strin ...

  9. FPGA 异步时钟处理方

    1 假设FPGA设计,包括不同的频率的时钟,它会发出涉及异步时钟. 我们需要一些方法来使时钟同步,从而保证FPGA可靠性设计. 2 在建立和保持时间所构成的有效时间窗体内,数据输入到触发器进行转换. ...

  10. SQL代理执行EXE可执行程序

    原文:SQL代理执行EXE可执行程序  1.如果没有启用xp_cmdshell安全配置是不可以使用的-- 启用xp_cmdshellEXEC sp_configure 'xp_cmdshell', 1 ...