文章出處

去年寫過一篇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


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()