entity framework oracle 自增列,Oracle使用Entity Framework 6.x

去年写过一篇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的项目

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

这是主程序入口

AAffA0nNPuCLAAAAAElFTkSuQmCC

b) 打开Solution 视图

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

再看下App.config

AAffA0nNPuCLAAAAAElFTkSuQmCC

会自动添加以下内容:

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

ok, ODP.Net安装配置完成

2.使用Code First模式开发

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

打开Program.cs这个文件

AAffA0nNPuCLAAAAAElFTkSuQmCC

换成下面这段代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC1 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());

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 Employees { get; set; }

70         public DbSet Departments { get; set; }

71

72         protected override void OnModelCreating(DbModelBuilder modelBuilder)

73         {

74             modelBuilder.HasDefaultSchema("HR");

75         }

76     }

77 }

View Code

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

运行结果

AAffA0nNPuCLAAAAAElFTkSuQmCC

打开Server Explorer面板

AAffA0nNPuCLAAAAAElFTkSuQmCC

连接到Oracle

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

可以直接查看数据

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

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

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值