上一篇文章介绍了.NET Entity Framework ,并演示了Model First模式,本文将继续讨论 Code First 模式的实现。

一、摘要

1、目标

本文验证了通过Oracle Data Provider for .NET (ODP.NET)使用Entity Framework (EF) Code First。先创建.NET类,通过框架在数据库中创建这些类对应的表;修改这些类,并通过Code First 将这些类的变化移植和映射到对应表中。

2、前言

Entity Framework 抽象关系型数据库的逻辑架构并映射到.NET应用中,为开发者提供了对象关系映射能力。Code First 让开发者开发的类转化为数据库的实体表。Code First Migrations 让类的变化精准地映射到数据库的对应表。

自从Oracle Data Access Components (ODAC) 12c Release 3 (12.1.0.2.1)这个版本开始,ODP.NET支持Code First 和 Code First Migrations 了,ODP.NET提供EF模型(Model)的数据库存、取及更新能力。

本文将建立EF程序,生成"Employee" 和"Department" 类,并添加这些类的对象数据。程序运行时,会将类映射到数据库表,并将对象存储为表记录行。然后为类添加新的属性,而这些属性会通过Code First Migrations添加到表的列信息。

3、环境条件

开始前,你应该满足以下条件:

  • Visual Studio 2013 以上,.Net Framework 4.5以上
  • Oracle 11g Release 2以上
  • 这些文件下载到你的工作目录(下载的文件为Programecs.txt)
  • 请先阅读“通过NuGet 安装配置ODP.NET”,本文将告诉你如何安装和配置 Entity Framework 6 以及 ODP.NET,并通过一个控制台程序来验证相关使用。
  • 如果你并不了解ODT是什么,本条可略。Oracle Developer Tools(ODT)可以集成到Visual Studio环境中辅助Oracle开发,但这对Code First并不是必须的。本文能过 Server Explorer 浏览Oracle数据库对象变化以验证Code First 对数据库的改变。如果你想用ODT的话请去Oracle官网上下载。

本文还将以Oracle 中自带的"HR"为例,但注意数据表对象的命名要避免冲突。

二、Code First

本部分将建两个类 "Employee" 、 "Department" ,并存储相关数据。当程序运行时,EF Code First会创建这两个类的对应表,并在生成类实例数据并保存时,会生成一个表的数据记录。

1、打开上一往篇文章中建立的项目(点此进入),打开app.config。在<connectionStrings> 配置节下修改用户名和密码,以连接HR数据库。注意链接的名字:OracleDbContext,我们会在后面的程序中用到这个名字

2、从下载的文件中copy出代码片段,粘到项目的Program.cs中。这段代码需要ODP.NET 和 EF 的相关配置,这些配置在前一篇文章中已配置好了。仔细阅读代码会发现,数据库操作类OracleDbContext 名字与第1步所提到的 <connectionStrings> 配置节中的名字相同。程序使用 连接串信息连接数据库,然后创建 Employee 和 Department 的实例,并生成数据。

如下图,看下这两个类在程序中如何定义的。每个类都包含有可被读取和保存的字段。其中一个字段(Location)被注释了,后续会去掉这个字段的注释。

如果你不想使用HR架构,你可以在代码" modelBuilder.HasDefaultSchema("HR"); " 中,将HR替换成你想用的架构。

3、运行程序,将在数据库中创建 "Employees" 和 "Departments" 表,并各添加一条数据。注意,这些表名是大小写敏感的。

4、检查一下数据库中,这些表各数据是否正常添加。运行完程序后,在Server Explorer 中点开 HR.ORCL链接。此步操作需要安装配置 ODT (Oracle Developer Tools for Visual Studio)

请输入正确的密码

展开表,检查在类中定义的两个表是否被创建

右键DepartmentsEmployees ,查询表数据,验证数据与程序中插入的一致性。

三、Code First Migration

类会随着业务需求和数据库架构的变化而改变类定义,本部分会改变Employee类来模拟这种变化 。只需少量代码,就能使类的变化同步到数据库表。

在第二部分代码中,第三个表_MigrationHistory同时被创建。这个表会跟踪Code First 类的变化。

本步将演示在Employee类中添加字段 Location ,并将它同步到数据库表中。

1、依次打开 View > Other Windows > Package Manager Console. 这个窗口的功能是用来输入Code First 的迁移命令,以同步.NET类和数据库结构。

2、在窗口里输入 Enable-Migrations 。这个命令是允许开启 Code First Migrations 功能。

3、在Program.cs 中去掉注释,模拟在Employee类中添加字段的情形。

4、在PMC窗口输入 Add-Migration First ,框架将会为数据模型Model 的变化 生成迁移代码。

5、在窗口中键入 Update-Database ,变化将同步到数据库

6、再看下数据库表的变化 。在Server Explorer打开 Employees表

验证下Location字段是否被添加

四、总结

本文要点如下:

  • 使用ODP.NET 创建 Code First 应用,将类及数据存储到数据库表中
  • 使用 Code First Migrations 更新数据库结构

.NET Entity Framework (with Oracle ODP.NET) -Code First的更多相关文章

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

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

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

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

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

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

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

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

  5. 使用entity framework开发oracle

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

  6. Entity Framework With Oracle

    参考页面: http://www.yuanjiaocheng.net/Entity/first.html http://www.yuanjiaocheng.net/Entity/jieshao.htm ...

  7. Entity Framework With Oracle(转)

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

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

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

  9. Entity Framework 5.0系列之Code First数据库迁移

    我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...

随机推荐

  1. Vue router 全局路由守卫

    记录一下全局路由守卫的使用: 方法一:定义一个数组用于检测与管理需要登录的页面,全局路由守卫配合本地存储判断是否跳转 import Vue from 'vue' import Router from ...

  2. 设置默认Browser

    电信A库要求android系统中有多个Browser时,开机自动设置一个默认浏览器,而不用弹出选择框让用户手动选择. 监听开机广播Intent.ACTION_BOOT_COMPLETED, 用Pack ...

  3. 验证签名机制——java示例

    简单的验证公钥私钥签名认证: 公钥是对外公开的部分,私钥是不公开的部分,一般在项目开发中公钥是给用户,私钥是存于服务器上,二者中有一个加密,则需要另外一个来解密. 下面是java实现的一个比较简单的示 ...

  4. POJ-3252 Avenger

    题意:在区间中,他们化成2进制的数的0的个数大于等于1的数有多少个. 思路:我们需要记录上一次0和1的个数,此外我们还要特别注意一下前导0. 如果前面全是0的时候我们就要注意下一位是不是还是0,如果一 ...

  5. python学习 day3 (3月4日)---字符串

    字符串: 下标(索引) 切片[起始:终止] 步长[起始:终止:1] 或者-1 从后往前 -1 -2 -3 15个专属方法: 1-6  : 格式:大小写 , 居中(6) s.capitalize() s ...

  6. Django的学习(六)————templates过滤器、Django shell、admin

    一.filter: 1.介绍: 写在模板中,属于Django的模板语言. 可以修改模板中的变量,从而显示不同的内容 2.使用: {{ value | filter }},且过滤器可以嵌套使用 < ...

  7. 《从0到1》深度阅读笔记zz

    没有人能精准地预测未来,我们只知道两件事:一是世界必然会变得不同:二是现在再好的描述也不能让我们看到清晰的未来. 创业者把成就归功于商业模式和机会窗口,归功于创业者本人拥有的资源和能力,但还有一个最重 ...

  8. 指令发布中如何实现new新消息的提醒?

    设计思路:反馈后,最急需了解反馈结果的是申请人,故给每一条反馈信息添加一个查看状态的字段,如CK_STATUS,并为这个状态设计为char(1)类型,java bean中使用integer可以实现默认 ...

  9. 4. Father's Impact on a Child's Language Development 父亲对孩子语言发展的影响

    4. Father's Impact on a Child's Language Development 父亲对孩子语言发展的影响 (1)Im families with two working pa ...

  10. Tomcat入门

    1.JavaWeb概念 Java web,是用java技术来解决相关web互联网领域的技术的总称.web包括:web服务器和web客户端两部分.java在最早web客户端的应用有java applet ...