Oracle中使用Entity Framework 6.x Code-First方式开发

简介: 去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版): 1.Using NuGet to Install and Configure Oracle Data Provider for .

去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下Oracle官网,发现EF6.X已经支持了,并且给出了二篇教程(英文版):

1.Using NuGet to Install and Configure Oracle Data Provider for .NET

2.Entity Framework Code First and Code First Migrations for Oracle Database

基本上照着做就行了,为了方便不愿意啃英文的朋友,把主要步骤"意译"了下:

环境: Visual Studio 2013 + .Net Framework 4.5.2

1. 使用NuGet安装、配置ODP.NET

a) 参考下图,创建一个Console Application的项目

项目名称随便吧,图中是NuGet

这是主程序入口


b) 打开Solution 视图

 

项目的References引用节点右击,选择Manage NuGet Packages...

参考下图,搜索Oracle,安装图中的二项:


 安装过程中,会弹出License对话框,点击I Accept

安装成功后,这二项应该会自动打上绿勾


安装完成后,会自动打开readme.txt,地球人一般都不看这玩意儿

检查下项目的References,参考下图,应该看到自动添加了4个新的dll引用

再看下App.config

会自动添加以下内容:

下图这二个地方,是用来配置连接字符串的,记得修改

ok, ODP.Net安装配置完成

 

2.使用Code First模式开发

a) 先参考下图,修改连接字符串(本文用的是HR这个示例用户,大家可以根据实际情况修改)

打开Program.cs这个文件


换成下面这段代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Xml.Linq;
 6 using System.Data.Common;
 7 using System.Data.Entity;
 8 using System.Data.Entity.Core.Objects;
 9 using System.Data.Entity.Migrations;
10 using System.Data.Entity.Infrastructure;
11 using System.Data.Entity.Migrations.History;
12 using System.ComponentModel.DataAnnotations;
13 using System.ComponentModel.DataAnnotations.Schema;
14 
15 namespace EFCodeFirst
16 {
17     class Program
18     {
19         static void Main(string[] args)
20         {
21             Database.SetInitializer(new DropCreateDatabaseAlways<OracleDbContext>());
22 
23             using (var ctx = new OracleDbContext())
24             {
25                 var emp = new Employee
26                 {
27                     Name = "Tom",
28                     HireDate = DateTime.Now
29                 };
30 
31                 ctx.Employees.Add(emp);
32                 ctx.SaveChanges();
33 
34                 var dept = new Department
35                 {
36                     Name = "Accounting",
37                     ManagerId = emp.EmployeeId
38                 };
39 
40                 ctx.Departments.Add(dept);
41                 ctx.SaveChanges();
42             }
43 
44             Console.Write("Press any key to continue... ");
45             Console.ReadLine();
46         }
47     }
48 
49 
50     public class Employee
51     {
52         public int EmployeeId { get; set; }
53         public string Name { get; set; }
54         public DateTime HireDate { get; set; }
55         //public string Location { get; set; }
56     }
57 
58     public class Department
59     {
60         public int DepartmentId { get; set; }
61         public string Name { get; set; }
62         [ForeignKey("Manager")]
63         public int ManagerId { get; set; }
64         public Employee Manager { get; set; }
65     }
66 
67     public class OracleDbContext : DbContext
68     {
69         public DbSet<Employee> Employees { get; set; }
70         public DbSet<Department> Departments { get; set; }
71 
72         protected override void OnModelCreating(DbModelBuilder modelBuilder)
73         {
74             modelBuilder.HasDefaultSchema("HR");
75         }
76     }
77 }
View Code

下面是主要的调用代码,演示了insert记录

下面是实体类的定义,完全是POJO对象,可以借助工具或纯手写.

 下面是DbContext部分,相当于DAL层.注意:OnModelCreating,这里表示根据Model创建表时,默认将创建到HR这个Database Schema下

运行结果

打开Server Explorer面板

连接到Oracle

可以看到根据Model定义,自动生成了二张表(注意下表名,自动加了复数)

可以直接查看数据

可以看到,成功插入了2条数据

b) Model与数据库的迁移合并

数据实体模型的类定义,往往随着需求的变化而变化,如果增加或减少了属性,EF可以自动生成相应的db脚本,同步修改表结构

先参考下图,进入PM控制台

输入Enable-Migrations启用数据库迁移功能

然后将Employee的类定义,把原来注释掉的Location属性行,去掉注释(即:增加了Location属性)

回到PM控制台,输入Add-Migration First 生成相应的db修改脚本

最后输入Update-Database更新表结构

打开Server Explorer视图,查看下Employees表

可以发现,已经增加了新字段Location

目录
相关文章
|
6月前
|
Android开发 iOS开发 开发者
轻松实现 UniApp Xcode 上传 IPA 无需 Mac,appuploder 一键上传助你高效开发!
轻松实现 UniApp Xcode 上传 IPA 无需 Mac,appuploder 一键上传助你高效开发!
|
Oracle 关系型数据库 数据库
实战篇:Oracle 数据坏块的 N 种修复方式
实战篇:Oracle 数据坏块的 N 种修复方式
实战篇:Oracle 数据坏块的 N 种修复方式
|
6月前
|
IDE 开发工具 Swift
【Swift开发专栏】Swift的Xcode调试技巧
【4月更文挑战第30天】本文介绍了Swift开发者必备的Xcode调试技巧,分为三部分:调试界面概览、常用操作和高级技术。内容涵盖调试区域、断点管理、单步调试、变量查看及LLDB命令行调试。通过学习条件断点、异常断点、视图调试等高级技术,开发者能提升问题解决效率。熟悉这些工具将有助于优化开发流程并增强项目性能。
128 1
|
Oracle Java 关系型数据库
JSP struts2工资管理系统myeclipse开发oracle数据库bs框架java编程网结构
JSP 工资管理系统是一套完善的struts2设计系统MVC结构,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Oracle10g,使用java语言开发,系统主要采用B/S模式开发。
68 1
|
Oracle Java 关系型数据库
JSP停车场车位管理系统myeclipse开发oracle数据库BS模式java编程网
JSP 停车场车位管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助servlet+bean+dao (mvc模式开发),系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Oracle 10g,使用java语言开发系统主要采用B/S模式开发。
60 0
|
iOS开发 开发者 容器
最全XCode 开发证书配置(证书过期后的恢复)教程
最全XCode 开发证书配置(证书过期后的恢复)教程
|
SQL Oracle 关系型数据库
开发必备:EsayCode使用以及Oracle自定义模板
写前先问一句,不会还有人在手动写这些基础的sql语句吧?! 最近在做Oracle的项目,手写mapper和entity文件真是写到手软,以前MySQL都是找的线上自动生成的,现在也不行了。 找了很长时间,也试验了一下mybaties-plus,后来要感谢掘金群里的老哥(图片已同意)。虽然默认模板很难用,但是自定义模板优化后,凑合可以使用吧。
|
iOS开发 开发者 容器
最全XCode 开发证书配置(证书过期后的恢复)教程
最全XCode 开发证书配置(证书过期后的恢复)教程
|
C++ iOS开发
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
848 0
iOS开发 -- 在Xcode中引入cpp文件,并调用cpp文件中的方法
|
API iOS开发
iOS 开发 - Xcode8下self.view.layer不能addSublayer,报错
iOS 开发 - Xcode8下self.view.layer不能addSublayer,报错
72 0
iOS 开发 - Xcode8下self.view.layer不能addSublayer,报错