.NET Entity Framework (with Oracle ODP.NET) -Code First
上一篇文章介绍了.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)

请输入正确的密码

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

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


三、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的更多相关文章
- .NET Entity Framework (with Oracle ODP.NET)
一.前言 1.Entity Framework是什么? Entity Framework是微软对ORM框架的实现.类似的实现也有其它方式,如DevExpress 的XPO(eXpress Persis ...
- Entity Framework 与ORACLE ODP.Net 在vs2010下的稀奇古怪的问题
不说废话 1.在vs2010数据源中看不到oracle odp.net 数据源,vs2008下可以看到,通过oraprocfg配置多次,重启多次,还是看不到,machine.config里面配置也正常 ...
- 让ADO.NET Entity Framework支持Oracle数据库
Oracle最近发布了 Oracle Data Access Component(ODAC)11. 2 Rel 4,其中增加了对 Entity Framework 4.1 和4.2的支持.这让 .NE ...
- [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) ...
- Entity Framework With Oracle
参考页面: http://www.yuanjiaocheng.net/Entity/first.html http://www.yuanjiaocheng.net/Entity/jieshao.htm ...
- Entity Framework With Oracle(转)
虽然EF6都快要出来了,但是对于Oracle数据库,仍然只能用DB first和Model First来编程,不能用Code First真是一个很大的遗憾啊. 好了,废话少说,我们来看看EF中是如何用 ...
- entity framework 连接 oracle 发布后出现的问题(Unable to find the requested .Net Framework Data Provider)
用entity framework 搭建的一个windows 程序,在vs中用oracle 的ODT 工具连接oracle数据库,昨天发布后出现下面一个错误, System.ArgumentExcep ...
- Entity Framework 5.0系列之Code First数据库迁移
我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...
随机推荐
- AnsiToUtf8 和 Utf8ToAnsi
在服务端数据库的处理当中,涉及中文字符的结构体字段,需要转为Utf8后再存储到表项中.从数据库中取出包含中文字符的字段后,如果需要保存到char *类型的结构体成员中,需要转为Ansi后再保存.从数据 ...
- Git使用基础篇(zz)
Git使用基础篇 您的评价: 收藏该经验 Git是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体 ...
- Ajax(6) Ajax向servlet请求数据库操作 并显示到当前页面 这个未经测试
假设:1.你的页面在Web-Root下,内容为: <div id="showMsg"></div><input type="text&quo ...
- Eclipse中配置约束
一.本地配置schema约束(xsd文件): 1.比如配置spring的applicationContext.xml中的约束条件: 复制applicationContext.xml中如图: 2.win ...
- 2019.01.23 ural1519 Formula 1(轮廓线dp)
传送门 轮廓线dpdpdp模板题. 题意简述:给一个放有障碍的网格图,问有多少种方法能使所有非障碍格子都在同一条哈密顿回路上面. 考虑用括号序列的写法来状压这个轮廓线. 用000表示没有插头,111表 ...
- 2019.01.03 bzoj3456: 城市规划(生成函数+多项式取对)
传送门 生成函数好题. 题意:求n个点的简单(无重边无自环)无向连通图数目 思路: 对简单无向图构造生成函数f(x)=∑n2Cn2xnn!f(x)=\sum_n2^{C_n^2}\frac{x^n}{ ...
- s4-介质访问控制子层-1 MAC子层
数据链路层被分成了两个子层:MAC和LLC MAC子层要解决什么问题? 介质访问控制(Madia Access Control) 数据通信方式 单播(unicast):One - to - One ...
- 第17章:MongoDB-聚合操作--聚合管道--$group
①$group 作用:将集合中的文档进行分组,可用于统计结果. 例如: db.scores.aggregate({“$group”:{“_id”:“$studentId”}}); 或者是 db.sco ...
- 20155205 2016-2017-2 《Java程序设计》第10周学习总结
20155205 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 计算机网络基础 什么是网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数 ...
- 快速创建一个 Servlet 项目(1)
1. 新建一个 maven project (web app) 得到如下项目 2. 添加 servlet 和 jsp 依赖 通常 servlet 和 jsp 依赖由web容器提供,这个编译错误并不会影 ...