Entity Framework With Oracle
参考页面:
http://www.yuanjiaocheng.net/Entity/first.html
http://www.yuanjiaocheng.net/Entity/jieshao.html
http://www.yuanjiaocheng.net/entity/tixijiegou.html
http://www.yuanjiaocheng.net/entity/setenvrionment.html
http://www.yuanjiaocheng.net/entity/createdatamodel.html
虽然EF6都快要出来了,但是对于Oracle数据库,仍然只能用DB first和Model First来编程,不能用Code First真是一个很大的遗憾啊。
好了,废话少说,我们来看看EF中是如何用DB first和Model First来对Oracle编程的。
首先我们要下载ODP.NET这个数据驱动程序,下载链接:http://www.oracle.com/technetwork/topics/dotnet/index-085163.html
安装成功后,我们在VS连接Oracle数据库时就可以选择ODP.NET了,如图:
Model First
模型优先是先建立数据模型,然后再根据模型生成相应的数据库脚本,然后再根据脚本生成数据库。
在项目中新增一个ADO.NET实体模型:OracleModel.edmx,选择“空模型”,再新新建两个实体:Destination与Lodging,如图:
为了看清这两个模型中属性的数据类型,我把他们生成的类也贴出来一下:
public partial class Destination { public Destination() { this.Lodging = new HashSet<Lodging>(); } public int DestinationId { get; set; } public string Name { get; set; } public string Country { get; set; } public byte Photo { get; set; } public string Description { get; set; } public virtual ICollection<Lodging> Lodging { get; set; } } public partial class Lodging { public int LodgingId { get; set; } public string Name { get; set; } public string Owner { get; set; } public bool IsResort { get; set; } public decimal MilesFromNearestAirport { get; set; } public int DestinationDestinationId { get; set; } public virtual Destination Destination { get; set; } }
实体模型的空白处,右键-属性,在打开的OracleModel模型属性窗口,设置一些属性,将DDL生成模板改成:SSDLToOracle.tt (VS),数据库架构名称改成:GYOUNG(这是我自己测试的Oracle数据库的用户名,大家可根据自己的更改),数据库生成工作流改成:Generate Oracle Via T4 (TPT).xaml (VS)
为了让EF更好的明白.NET中的数据类型与Oracle中数据类型间的对应关系。我们可以将下面的配置文件加到app.config中。
<oracle.dataaccess.client> <settings> <add name="bool" value="edmmapping number(1,0)" /> <add name="byte" value="edmmapping number(3,0)" /> <add name="int16" value="edmmapping number(4,0)" /> <add name="int32" value="edmmapping number(9,0)" /> <add name="int64" value="edmmapping number(18,0)" /> </settings> </oracle.dataaccess.client>
现在我们就可以生成数据库的相应脚本了。
在空白处右键,选择“根据模型生成数据库”
然后建立好数据连接,如图:
点击下一步,然后就会生成相应的数据脚本。
-- Creating table 'Destinations' CREATE TABLE "GYOUNG"."Destinations" ( "DestinationId" ,) NOT NULL, "Name" NCLOB NOT NULL, "Country" NCLOB NOT NULL, "Photo" ,) NOT NULL, "Description" NCLOB NOT NULL ); -- Creating table 'Lodgings' CREATE TABLE "GYOUNG"."Lodgings" ( "LodgingId" ,) NOT NULL, "Name" NCLOB NOT NULL, "Owner" NCLOB NOT NULL, "IsResort" ,) NOT NULL, "MilesFromNearestAirport" ,) NOT NULL, "DestinationDestinationId" ,) NOT NULL ); -- -------------------------------------------------- -- Creating all PRIMARY KEY constraints -- -------------------------------------------------- -- Creating primary key on "DestinationId"in table 'Destinations' ALTER TABLE "GYOUNG"."Destinations" ADD CONSTRAINT "PK_Destinations" PRIMARY KEY ("DestinationId" ) ENABLE VALIDATE; -- Creating primary key on "LodgingId"in table 'Lodgings' ALTER TABLE "GYOUNG"."Lodgings" ADD CONSTRAINT "PK_Lodgings" PRIMARY KEY ("LodgingId" ) ENABLE VALIDATE; -- -------------------------------------------------- -- Creating all FOREIGN KEY constraints -- -------------------------------------------------- -- Creating foreign key on "DestinationDestinationId" in table 'Lodgings' ALTER TABLE "GYOUNG"."Lodgings" ADD CONSTRAINT "FK_DestinationLodging" FOREIGN KEY ("DestinationDestinationId") REFERENCES "GYOUNG"."Destinations" ("DestinationId") ENABLE VALIDATE; -- Creating index for FOREIGN KEY 'FK_DestinationLodging' CREATE INDEX "IX_FK_DestinationLodging" ON "GYOUNG"."Lodgings" ("DestinationDestinationId"); -- -------------------------------------------------- -- Script has ended -- --------------------------------------------------
我们只要将脚本到数据库中执行一下就可以生成相应的表了。分析一下生成的SQL语句,有主键,外键,但并没有为主键设置自增长。Oracle设置自增长也是一个很蛋疼的问题,要通过设置相应的Sequences和Triggers来实现,习惯了SQL SERVER的IDENTITY,对于这个还真不爽。这里我们不管它,就自己插入主键好了。下面是测试代码:
using (OracleModelContainer context = new OracleModelContainer()) { var destination = new Destination { DestinationId=, Country = "Indonesia", Description = "EcoTourism at its best in exquisite Bali", Name = "Bali" }; var lodging = new Lodging { LodgingId=, Owner="Jshon", Name = "Top Notch Resort and Spa", MilesFromNearestAirport = , IsResort=true, Destination=destination }; context.Lodgings.Add(lodging); context.SaveChanges(); }
通过VS连接Oracle可以看到数据插入成功。
DB First
DB First顾名思义就是在先建好数据库,再进行编程。我们新建一个项目,就以刚刚生成的那再张表来编程。
在新建项目中添加一个“ADO.NET 实体数据模型”:DBModel.edmx,选择“从数据库生成”
设置好连接串
选择表
点击完成,就会生成相应的模型。
我们来检索一下刚刚插入的数据。
using (Entities context = new Entities()) { var des = context.Destinations.FirstOrDefault(); var log = context.Lodgings.FirstOrDefault(); Console.WriteLine("Lodging Name:" + log.Name + " Owner:" + log.Owner); Console.WriteLine("Destination Name:" + des.Name + " Country:" + des.Country); }
结果如图。
PS:在DB First模式中,更要将Model First中所说的映射配置文件加入App.config中,不然很多数据类型映射会出错。
伪Code First
见我的另一篇博客:Entity Framework Code First在Oracle下的伪实现
Entity Framework With Oracle的更多相关文章
- [VSTS]让ADO.NET Entity Framework支持Oracle数据库(转载)
近期由于项目所需不得不研究Oracle数据库,回想上一次用Oracle还是07年的事情,实习时候做华晨宝马的项目简单接触了Oracle.这次的项目需要基于.NET平台,我个人的习惯是能用微软自带的就不 ...
- 使用entity framework开发oracle
A.vs2010 SP1 B.ODAC(http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html) ...
- 让ADO.NET Entity Framework支持Oracle数据库
Oracle最近发布了 Oracle Data Access Component(ODAC)11. 2 Rel 4,其中增加了对 Entity Framework 4.1 和4.2的支持.这让 .NE ...
- Entity Framework 与ORACLE ODP.Net 在vs2010下的稀奇古怪的问题
不说废话 1.在vs2010数据源中看不到oracle odp.net 数据源,vs2008下可以看到,通过oraprocfg配置多次,重启多次,还是看不到,machine.config里面配置也正常 ...
- entity framework 连接 oracle 发布后出现的问题(Unable to find the requested .Net Framework Data Provider)
用entity framework 搭建的一个windows 程序,在vs中用oracle 的ODT 工具连接oracle数据库,昨天发布后出现下面一个错误, System.ArgumentExcep ...
- ODAC的安装以及Entity Framework for Oracle 基本配置
1.安装ODAC 根据自己操作系统x86,x64来判断下载的ODAC版本 http://www.oracle.com/technetwork/database/windows/downloads/ut ...
- .NET Entity Framework (with Oracle ODP.NET) -Code First
上一篇文章介绍了.NET Entity Framework ,并演示了Model First模式,本文将继续讨论 Code First 模式的实现. 一.摘要 1.目标 本文验证了通过Oracle D ...
- .NET Entity Framework (with Oracle ODP.NET)
一.前言 1.Entity Framework是什么? Entity Framework是微软对ORM框架的实现.类似的实现也有其它方式,如DevExpress 的XPO(eXpress Persis ...
- Entity Framework With Oracle(转)
虽然EF6都快要出来了,但是对于Oracle数据库,仍然只能用DB first和Model First来编程,不能用Code First真是一个很大的遗憾啊. 好了,废话少说,我们来看看EF中是如何用 ...
随机推荐
- weblogic启动报错--com.octetstring.vde.backend.BackendRoot
错误现象: 使用bea用户启动weblogic时报错,错误信息如下: <2014-7-29 下午07时47分23秒 CST> <Notice> <Log Manageme ...
- Lua 5.2 Reference Manual
Lua 5.2 Reference Manual.pdf
- 10.读google测试之道有感
(一)读google测试之道有感.
- ADFS 2.0 配置简介 PartⅠ – 安装ADFS
Active Directory Federation Service 也即联盟身份认证服务是微软的单点登录解决方案 (SSO),配置步骤相当多,中文资料也比较少,写在这里希望对后来人有所帮助 ...
- Tween动画
知识点 Alpha:渐变透明度动画效果 Scale:渐变尺寸伸缩动画效果 Translate:移动效果 Rotate:旋转效果 1. AlphaAnimation(float fromAlpha,fl ...
- MVC区域小结
MVC区域小结 MVC区域小结 MVC3一直在学习,项目中有的时候也会用到,博客园也一直逛,想写点什么东西,可惜我这个人平时都很懒,理论层面的东西自己写不来,还是来点实际的简单入门的博客,对自己总结能 ...
- 基于Jquery 简单实用的弹出提示框
基于Jquery 简单实用的弹出提示框 引言: 原生的 alert 样子看起来很粗暴,网上也有一大堆相关的插件,但是基本上都是大而全,仅仅几句话可以实现的东西,可能要引入好几十k的文件,所以话了点时间 ...
- html+js+ashx+easyui+ado.net权限管理系统
分享一个html+js+ashx+easyui+ado.net权限管理系统 EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也 ...
- Euclid Problem - PC110703
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10104.html 原创:Eucl ...
- boke
云/n 计算/v 代表/n IT/x 领域/n 向/p 集约化/v ./w 规模化/v 与/c 专业化/v 道路/n 发展/v 的/u 趋势/n ,/w 是/v IT/x 领域/n 正在/d 发生/v ...