簡(jiǎn)介
Entity Framework(以下簡(jiǎn)稱EF) 是微軟推出的一個(gè)ORM框架,按照微軟一貫的傳統(tǒng),需要等到3.0版本,軟件才會(huì)好用,我第一次看到EF的時(shí)候,當(dāng)時(shí)的EF只支持從數(shù)據(jù)庫(kù)生成復(fù)雜無(wú)比的代碼,所以一直沒(méi)有將EF作為生產(chǎn)工具使用。
目前的EF支持三種開發(fā)模式
- 數(shù)據(jù)庫(kù)優(yōu)先(Database First)**
傳統(tǒng)的開發(fā)模式,先設(shè)計(jì)數(shù)據(jù)庫(kù),再?gòu)臄?shù)據(jù)庫(kù)生成對(duì)應(yīng)的數(shù)據(jù)存取代碼。 - 模型優(yōu)先(Model First)
使用可視化模型設(shè)計(jì)工具,構(gòu)建數(shù)據(jù)模型。 - 代碼優(yōu)先(Code First)
這是EF擁抱DDD開發(fā),支持POCO(Plain Old CLR Object)類型的開發(fā)模式。
也將是我們接下來(lái)要介紹的開發(fā)模式。
工作環(huán)境
Visual Studio 2013/2015
任務(wù)描述
使用Microsoft Entity Framework 6.0(以下簡(jiǎn)稱EF) Code First編程模式,制作一個(gè)可運(yùn)行的極簡(jiǎn)代碼項(xiàng)目。
- 訂單數(shù)據(jù)表 SaleOrder
- 基本的CRUD測(cè)試
準(zhǔn)備工作
- 創(chuàng)建一個(gè)控制臺(tái)應(yīng)用項(xiàng)目 EFDemo.T1
- 使用Nuget Package Manager添加引用
2.1 右鍵解決方案,選擇菜單"Enable Nuget Package Restore"
如圖提示,表示Nuget已成功啟用。

2.2 管理解決方案的Nuget程序包
打開Nuget管理工具,聯(lián)機(jī)欄目中,我們看到Entity Framework 排在第二位,點(diǎn)擊“安裝”即可。如果你沒(méi)有看到Entity Framework,可以在右側(cè)“搜索聯(lián)機(jī)(Ctrl+E)”處鍵入"Entity Framework"進(jìn)行搜索。

書寫代碼
- 創(chuàng)建一個(gè)實(shí)體類SaleOrder
Public Class SaleOrder
Public Property Id() As Integer
Public Property Name() As String
Public Property Amount As Nullable(Of Decimal)
End Class
- 創(chuàng)建數(shù)據(jù)庫(kù)上下文 DBContext
Public Class DemoContext Inherits DbContext
Public Property SaleOrder As DbSet(Of SaleOrder)
End Class
- CRUD 代碼
Sub Main()
Console.WriteLine("*** Entity Framework 演示程序 ***")
Using db = New DemoContext
'Create
Console.Write("新增十行記錄。")
Dim rnd As New Random
For I = 1 To 10
Dim newEntity As New SaleOrder With {.Id = rnd.Next, .Name = "Name" & .Id, .Amount = rnd.NextDouble * 1000}
db.SaleOrder.Add(newEntity)
Next
db.SaveChanges()
'Read
Console.WriteLine("讀取一行記錄。")
Dim row = db.SaleOrder.OrderBy(Function(c) c.Id).FirstOrDefault
'Update
Console.WriteLine("修改/更新一行記錄。")
row.Name = row.Name & " Update at: " & Now
Console.WriteLine(String.Format("ID: {0}", row.Id))
Console.WriteLine(String.Format("Name: {0}", row.Name))
Console.WriteLine(String.Format("Amount: {0}", row.Amount))
db.SaveChanges()
'Delete
Console.WriteLine("刪除一行記錄。")
Console.WriteLine(String.Format("刪除前共有數(shù)據(jù)記錄{0}行。", db.SaleOrder.Count))
Dim q = db.SaleOrder.OrderBy(Function(c) c.Id).Skip(3).FirstOrDefault
db.SaleOrder.Remove(q)
db.SaveChanges()
Console.WriteLine(String.Format("刪除后共有數(shù)據(jù)記錄{0}行。", db.SaleOrder.Count))
End Using
Console.WriteLine("按任意鍵退出。")
Console.ReadKey()
End Sub
總結(jié)
實(shí)體:三個(gè)字段,五行代碼
數(shù)據(jù): 一個(gè)數(shù)據(jù)表,三行代碼
這就是EF可以開始工作的全部代碼。
考慮到需要一些提示,還有演示新增、查詢、修改、刪除功能的需要,Main里面的代碼稍微多了一點(diǎn)點(diǎn)。
現(xiàn)在可以按下“F5”,運(yùn)行演示程序,出現(xiàn)如下圖結(jié)果。

藏在代碼后面,EF幫助我們做了哪一些工作,我們將在下一篇文章中闡述。
`