.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 ...
随机推荐
- flask学习视频
https://study.163.com/course/courseMain.htm?courseId=1004091002 主要 https://www.cnblogs.com/senlinyan ...
- 利用PHP脚本辅助MySQL数据库管理1-表结构
<?php $dbi = new DbMysql; $dbi->dbh = 'mysql://root:mysql@127.0.0.1/coffeetest'; $map = array( ...
- 核心一:DI
1.DI:中文名称:依赖注入 2.英文名称:(Dependency Injection) 3.DI是什么?? 3.1 DI和IoC是一样的 3.2 当一个类(A)中需要依赖另一类(B)对象时,把B赋值 ...
- 爬虫之mongodb数据库
一 mongodb的介绍 1.易用性:mongodb是一款强大.灵活并且易扩展的数据库.他面向于文档的数据库,而不是关系性数据库.不采用关系型主要是为了获得更好的扩展性.还有一个好处就是面向文档的数据 ...
- Django的开始
一 浏览器相关知识 http:只有依赖一回,属于短链接,不会报错客户端的信息. 浏览器相当于一个客户端,客户端的链接 服务端:socket服务端,起服务监听客户端的请求. import socket ...
- 2019.02.09 bzoj4487: [Jsoi2015]染色问题(容斥原理)
传送门 题意简述: 用ccc中颜色给一个n∗mn*mn∗m的方格染色,每个格子可涂可不涂,问最后每行每列都涂过色且ccc中颜色都出现过的方案数. 思路: 令fi,j,kf_{i,j,k}fi,j,k ...
- UVa 11021 Tribles (概率DP + 组合数学)
题意:有 k 只小鸟,每只都只能活一天,但是每只都可以生出一些新的小鸟,生出 i 个小鸟的概率是 Pi,问你 m 天所有的小鸟都死亡的概率是多少. 析:先考虑只有一只小鸟,dp[i] 表示 i 天全部 ...
- 不同数据源之间的数据同步jdbc解决方案
最近项目中用到的数据要从一个数据源获取存进另一个数据源,简单的jdbc解决方案. package com.sh.ideal.test.syns; import java.sql.Connection; ...
- R语言的文件写入
R语言的文件写入 官方文档介绍如下: write.table(x, file = "", append = FALSE, quote = TRUE, sep = " &q ...
- VB6.0中WinSock控件属性和方法详解
原文链接:http://liweibird.blog.51cto.com/631764/653134 WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器 ...