参考页面:

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,如图:

为了看清这两个模型中属性的数据类型,我把他们生成的类也贴出来一下:

  1. public partial class Destination
  2. {
  3. public Destination()
  4. {
  5. this.Lodging = new HashSet<Lodging>();
  6. }
  7.  
  8. public int DestinationId { get; set; }
  9. public string Name { get; set; }
  10. public string Country { get; set; }
  11. public byte Photo { get; set; }
  12. public string Description { get; set; }
  13.  
  14. public virtual ICollection<Lodging> Lodging { get; set; }
  15. }
  16.  
  17. public partial class Lodging
  18. {
  19. public int LodgingId { get; set; }
  20. public string Name { get; set; }
  21. public string Owner { get; set; }
  22. public bool IsResort { get; set; }
  23. public decimal MilesFromNearestAirport { get; set; }
  24. public int DestinationDestinationId { get; set; }
  25.  
  26. public virtual Destination Destination { get; set; }
  27. }

实体模型的空白处,右键-属性,在打开的OracleModel模型属性窗口,设置一些属性,将DDL生成模板改成:SSDLToOracle.tt (VS),数据库架构名称改成:GYOUNG(这是我自己测试的Oracle数据库的用户名,大家可根据自己的更改),数据库生成工作流改成:Generate Oracle Via T4 (TPT).xaml (VS)

为了让EF更好的明白.NET中的数据类型与Oracle中数据类型间的对应关系。我们可以将下面的配置文件加到app.config中。

  1. <oracle.dataaccess.client>
  2. <settings>
  3. <add name="bool" value="edmmapping number(1,0)" />
  4. <add name="byte" value="edmmapping number(3,0)" />
  5. <add name="int16" value="edmmapping number(4,0)" />
  6. <add name="int32" value="edmmapping number(9,0)" />
  7. <add name="int64" value="edmmapping number(18,0)" />
  8. </settings>
  9. </oracle.dataaccess.client>

现在我们就可以生成数据库的相应脚本了。

在空白处右键,选择“根据模型生成数据库”

然后建立好数据连接,如图:

点击下一步,然后就会生成相应的数据脚本。

  1. -- Creating table 'Destinations'
  2. CREATE TABLE "GYOUNG"."Destinations" (
  3. "DestinationId" ,) NOT NULL,
  4. "Name" NCLOB NOT NULL,
  5. "Country" NCLOB NOT NULL,
  6. "Photo" ,) NOT NULL,
  7. "Description" NCLOB NOT NULL
  8. );
  9.  
  10. -- Creating table 'Lodgings'
  11. CREATE TABLE "GYOUNG"."Lodgings" (
  12. "LodgingId" ,) NOT NULL,
  13. "Name" NCLOB NOT NULL,
  14. "Owner" NCLOB NOT NULL,
  15. "IsResort" ,) NOT NULL,
  16. "MilesFromNearestAirport" ,) NOT NULL,
  17. "DestinationDestinationId" ,) NOT NULL
  18. );
  19.  
  20. -- --------------------------------------------------
  21. -- Creating all PRIMARY KEY constraints
  22. -- --------------------------------------------------
  23.  
  24. -- Creating primary key on "DestinationId"in table 'Destinations'
  25. ALTER TABLE "GYOUNG"."Destinations"
  26. ADD CONSTRAINT "PK_Destinations"
  27. PRIMARY KEY ("DestinationId" )
  28. ENABLE
  29. VALIDATE;
  30.  
  31. -- Creating primary key on "LodgingId"in table 'Lodgings'
  32. ALTER TABLE "GYOUNG"."Lodgings"
  33. ADD CONSTRAINT "PK_Lodgings"
  34. PRIMARY KEY ("LodgingId" )
  35. ENABLE
  36. VALIDATE;
  37.  
  38. -- --------------------------------------------------
  39. -- Creating all FOREIGN KEY constraints
  40. -- --------------------------------------------------
  41.  
  42. -- Creating foreign key on "DestinationDestinationId" in table 'Lodgings'
  43. ALTER TABLE "GYOUNG"."Lodgings"
  44. ADD CONSTRAINT "FK_DestinationLodging"
  45. FOREIGN KEY ("DestinationDestinationId")
  46. REFERENCES "GYOUNG"."Destinations"
  47. ("DestinationId")
  48. ENABLE
  49. VALIDATE;
  50.  
  51. -- Creating index for FOREIGN KEY 'FK_DestinationLodging'
  52. CREATE INDEX "IX_FK_DestinationLodging"
  53. ON "GYOUNG"."Lodgings"
  54. ("DestinationDestinationId");
  55.  
  56. -- --------------------------------------------------
  57. -- Script has ended
  58. -- --------------------------------------------------

我们只要将脚本到数据库中执行一下就可以生成相应的表了。分析一下生成的SQL语句,有主键,外键,但并没有为主键设置自增长。Oracle设置自增长也是一个很蛋疼的问题,要通过设置相应的Sequences和Triggers来实现,习惯了SQL SERVER的IDENTITY,对于这个还真不爽。这里我们不管它,就自己插入主键好了。下面是测试代码:

  1. using (OracleModelContainer context = new OracleModelContainer())
  2. {
  3. var destination = new Destination
  4. {
  5. DestinationId=,
  6. Country = "Indonesia",
  7. Description = "EcoTourism at its best in exquisite Bali",
  8. Name = "Bali"
  9. };
  10. var lodging = new Lodging
  11. {
  12. LodgingId=,
  13. Owner="Jshon",
  14. Name = "Top Notch Resort and Spa",
  15. MilesFromNearestAirport = ,
  16. IsResort=true,
  17. Destination=destination
  18. };
  19. context.Lodgings.Add(lodging);
  20. context.SaveChanges();
  21. }

通过VS连接Oracle可以看到数据插入成功。

DB First

DB First顾名思义就是在先建好数据库,再进行编程。我们新建一个项目,就以刚刚生成的那再张表来编程。

在新建项目中添加一个“ADO.NET 实体数据模型”:DBModel.edmx,选择“从数据库生成”

设置好连接串

选择表

点击完成,就会生成相应的模型。

我们来检索一下刚刚插入的数据。

  1. using (Entities context = new Entities())
  2. {
  3. var des = context.Destinations.FirstOrDefault();
  4. var log = context.Lodgings.FirstOrDefault();
  5. Console.WriteLine("Lodging Name:" + log.Name + " Owner:" + log.Owner);
  6. Console.WriteLine("Destination Name:" + des.Name + " Country:" + des.Country);
  7. }

结果如图。

PS:在DB First模式中,更要将Model First中所说的映射配置文件加入App.config中,不然很多数据类型映射会出错。

伪Code First

见我的另一篇博客:Entity Framework Code First在Oracle下的伪实现

Entity Framework With Oracle的更多相关文章

  1. [VSTS]让ADO.NET Entity Framework支持Oracle数据库(转载)

    近期由于项目所需不得不研究Oracle数据库,回想上一次用Oracle还是07年的事情,实习时候做华晨宝马的项目简单接触了Oracle.这次的项目需要基于.NET平台,我个人的习惯是能用微软自带的就不 ...

  2. 使用entity framework开发oracle

    A.vs2010 SP1 B.ODAC(http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html) ...

  3. 让ADO.NET Entity Framework支持Oracle数据库

    Oracle最近发布了 Oracle Data Access Component(ODAC)11. 2 Rel 4,其中增加了对 Entity Framework 4.1 和4.2的支持.这让 .NE ...

  4. Entity Framework 与ORACLE ODP.Net 在vs2010下的稀奇古怪的问题

    不说废话 1.在vs2010数据源中看不到oracle odp.net 数据源,vs2008下可以看到,通过oraprocfg配置多次,重启多次,还是看不到,machine.config里面配置也正常 ...

  5. entity framework 连接 oracle 发布后出现的问题(Unable to find the requested .Net Framework Data Provider)

    用entity framework 搭建的一个windows 程序,在vs中用oracle 的ODT 工具连接oracle数据库,昨天发布后出现下面一个错误, System.ArgumentExcep ...

  6. ODAC的安装以及Entity Framework for Oracle 基本配置

    1.安装ODAC 根据自己操作系统x86,x64来判断下载的ODAC版本 http://www.oracle.com/technetwork/database/windows/downloads/ut ...

  7. .NET Entity Framework (with Oracle ODP.NET) -Code First

    上一篇文章介绍了.NET Entity Framework ,并演示了Model First模式,本文将继续讨论 Code First 模式的实现. 一.摘要 1.目标 本文验证了通过Oracle D ...

  8. .NET Entity Framework (with Oracle ODP.NET)

    一.前言 1.Entity Framework是什么? Entity Framework是微软对ORM框架的实现.类似的实现也有其它方式,如DevExpress 的XPO(eXpress Persis ...

  9. Entity Framework With Oracle(转)

    虽然EF6都快要出来了,但是对于Oracle数据库,仍然只能用DB first和Model First来编程,不能用Code First真是一个很大的遗憾啊. 好了,废话少说,我们来看看EF中是如何用 ...

随机推荐

  1. 基于Quqrtz.NET 做的任务调度管理工具

    基于Quqrtz.NET 做的任务调度管理工具 国庆前,需求让我看了一下任务调度的数据表设计.和之前一样,有100多个字段,p1 ~ p100, 我说这是干嘛啊!按这写,写死去了! 然后在网上搜了一下 ...

  2. 干净的架构The Clean Architecture

    干净的架构The Clean Architecture 这是著名软件大师Bob大叔提出的一种架构,也是当前各种语言开发架构.干净架构提出了一种单向依赖关系,从而从逻辑上形成一种向上的抽象系统. 我们经 ...

  3. ASP.NET请求处理过程

    当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给Aspnet_isapi.dll,aspnet_isapi.dll会通 ...

  4. Oracle琐碎笔记2

    备注:以下所有操作均在sqlplus中执行. 开始前输入:spool c:\jiyi.txt;结束后输入:spool off;就会记忆操作的所有记录save c:\sql.sql;保存sql脚本可以使 ...

  5. 轻量级IOC框架:Ninject

    Ninject 学习杂记 - liucy 时间2014-03-08 00:26:00 博客园-所有随笔区原文  http://www.cnblogs.com/liucy1898/p/3587455.h ...

  6. 对student进行增删改

    drop package TechEd_pkg_Student; CREATE OR REPLACE PACKAGE TechEd_pkg_Student AS FUNCTION F_CREATE(p ...

  7. Push Notification总结系列(一)

    Notification系列概括: 1.Push Notification简介和证书说明及生成配置 2.Push Notification的iOS处理代码和Provider详解 3.Push Noti ...

  8. Hadoop企业级应用

    Hadoop专业解决方案之构建Hadoop企业级应用 一.大数据的挑战 大数据面对挑战是你必须重新思考构建数据分析应用的方式.传统方式的应用构建是基于数据存储在不支持大数据处理的基础之上.这主要是因为 ...

  9. Asp.Net Web API 2(CRUD操作)第二课

    Asp.Net Web API 2(CRUD操作)第二课 Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok ...

  10. hdu 2159

    二维背包,dp[i][j]表示忍耐度为i,且还可以杀j个怪时能获得的最大经验值 dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]为杀死第k种怪掉的忍耐度 ...