天天看點

[轉】.Net開發人員可以擁抱Entity Framework 了

閱讀目錄

<a href="http://www.cnblogs.com/supercpp/archive/2012/02/20/2354751.html#Future">3. 展望EF5</a>

1. 資料庫遷徙: 這是EF4.3中最重要的新特性,這樣我們就能将精力集中在程式員喜歡做的事情上:寫簡單傳統的CLR實體(Plain Old CLR Object),而不是寫SQL語句去維護資料庫,想添加一個字段就添加,想删除就删除,想修改名字就修改,是不是很爽?

2. 删除了EdmMetadata表:這個表就是一個半成品,用CodeFirst根本不會用這個表去維護資料庫,因為有了資料庫遷徙功能,資料庫的結構資訊能夠自動生成,是以這個表就是多餘的了。

3. 非Public字段上也可以添加資料描述屬性了:以前預設情況下,Code First 會忽略private、protected和internal字段上的屬性資訊,即使你寫代碼将這些字段包含到你的模型裡面(通過Fluent API),這些字段上的屬性資訊也會被忽略。在這個版本中,如果你通過Fluent API将這些非Public字段加入你的模型,所有屬性資訊都能起作用了。

5. 修改了一系列的Bug,包括Unicode的DbSet名稱等等。

  

名稱

說明

VS2010

因為要用NuGet

NuGet

EF4.3

這個可以直接用NuGet,安裝并引用到你的項目中。如果你安裝過beta版本,相信你也會用NuGet的指令工具更新: Update-Package EntityFramework

軟體開發是一個疊代增量的過程,沒有人能夠一開始就完全設計好資料模型,是以對于Code First來說,最常見的開發場景是随着功能需求不斷完善我們的資料模型。下面開始一步一步嘗試資料庫遷徙功能。在示例中我用Asp.net MVC3項目,首先建立一個項目,選擇空模闆,預設情況會引用一個EntityFramework,但很可能是4.1版本,删除這個引用,我們用NuGet将4.3版本的EF引入MVC3中:

[轉】.Net開發人員可以擁抱Entity Framework 了

當然你也可以通過指令行的方式(打開NuGet的Package Management Console,PMC):PM&gt; Install-package EntityFramework

假設我們要建立的是一個網上書店,首先我們通過Code First建立我們的模型:

[轉】.Net開發人員可以擁抱Entity Framework 了

<a href="http://www.cnblogs.com/yelaiju/admin/javascript:void(0);">複制代碼</a>

[轉】.Net開發人員可以擁抱Entity Framework 了

非常簡單的模型,下一步是在我們網站上使用這個模型,将書以清單的方式顯示出來,第一步添加HomeController:

[轉】.Net開發人員可以擁抱Entity Framework 了
[轉】.Net開發人員可以擁抱Entity Framework 了

第二步添加對應的View:

[轉】.Net開發人員可以擁抱Entity Framework 了
[轉】.Net開發人員可以擁抱Entity Framework 了

然後F5,你就應該在浏覽器裡面看到下面的結果:

[轉】.Net開發人員可以擁抱Entity Framework 了

我們什麼也沒幹,一個簡單的網站就完成了,是不是很神奇?我們甚至沒有配置資料庫連接配接字元串。這都是因為EF設計的原則是“約定好于配置” (Convention Over Configuration),預設情況下,EF找你本機上的SqlExpress資料庫,因為我機器上有這個資料庫,是以EF就能自動連接配接資料庫,然後根據上面的資料模型生成對應的資料庫:

[轉】.Net開發人員可以擁抱Entity Framework 了

如果到這裡,一切都正常,讓我們進入正題,使用EF4.3中的Migaration功能:

第一步:修改我們的模型,由于新的需求,每本書還應該有一個ISBN編号:

[轉】.Net開發人員可以擁抱Entity Framework 了
[轉】.Net開發人員可以擁抱Entity Framework 了

很簡單,隻需要在PMC中執行下面3個指令:

1. Enable-Migrations

2. Add-Migration Book-ISBN (Book-ISBN是任意一個名稱标記,用來标記一個遷移點)

3. Update-Database

如果執行完上面三個指令,并且一切順利,恭喜你,資料庫更新完成,你應該在項目裡面看到:

[轉】.Net開發人員可以擁抱Entity Framework 了

并且資料庫已經變成:

[轉】.Net開發人員可以擁抱Entity Framework 了

這時候F5,運作系統,應該一切正常了,你可以嘗試在Controller中加入另外一條記錄,我加入了:

[轉】.Net開發人員可以擁抱Entity Framework 了
[轉】.Net開發人員可以擁抱Entity Framework 了

是以看到的是:

[轉】.Net開發人員可以擁抱Entity Framework 了

到此為止,我們已經一步一步完成了最簡單的資料庫遷徙/更新, 在上面生成的Migarations檔案夾中主要一個配置檔案和一個資料庫遷移檔案,資料庫遷移檔案有兩個函數,一個是Up,即更新資料庫,一個事Down,即回溯資料庫,去看看生成的代碼很容易了解它幹了什麼。

雖然EF能夠自動根據資料模型生成對應的資料庫結構,但是通常自動生成的資料庫隻是最基本的,通常我們需要設定更多的屬性。比如上面的Book資料模型,預設的資料庫是以BookId這個主鍵建立索引,可是我們還希望以Title建立索引,這樣我們能夠快速的根據書名查找。另外,上面示例中,添加ISBN字段後,已經有了的資料預設是Null,這會在程式中引起不必要的麻煩,我們假設希望已有的記錄的ISBN是000-0-000-00000-0。

面對上面這些需求,我們首先通過下面指令建立一個遷徙:

Add-Migration IndexTitleAndDefault

在項目樹的Migrations檔案夾下面會生成一個新的cs檔案,我的是201202191349250_IndexTitleAndDefault.cs,注意前面時間戳會不一樣。

然後修改生成的遷移檔案:

[轉】.Net開發人員可以擁抱Entity Framework 了
[轉】.Net開發人員可以擁抱Entity Framework 了

最後執行指令:Update-Database,資料庫應該建立了Title的索引,并且ISBN的預設值是000-0-000-00000-0。

上面所有操作都是更新到最新的版本,但有時候我們希望資料庫能回溯到以前的版本,這在以前手動維護資料庫時候是比較困難的,而EF4.3提供的資料庫變遷特性能很友善的進行回溯:

隻需要執行Updat-Database指令的時候,加入–TargetMigration:"XXX" 參數即可,比如我們想回到第二步的版本,我們隻需要執行:

PM&gt; Update-Database –TargetMigration:"201202190625099_Book-ISBN"

但是為了實作版本回溯,我們就得特别注意實作Down函數,相當于Down函數式Up函數的反函數。

另外執行Update-Database指令的時候加入-Script參數,這樣就不是直接修改資料庫結構,而是生成相應的Sql腳本:

Update-Database -Script -SourceMigration:"aaa" -TargetMigration:"bbb"

如果不指定TargetMigration,就預設是遷徙到最新的版本。

據微軟的開發團隊透露,EF的下一個版本是EF5,微軟的版本号非常混亂,最開始EF是1.0,後來說要和.Net Framwork的版本号統一,是以直接就上到了EF4,現在.Net Framework的下一個版本是4.5,可是EF又要變成5了,他們在搞什麼? 不管怎麼樣,看這個勢頭,EF5還是很值得期待的,有可能有以下改進:

1. 支援枚舉類型

3. 改進SQL語句的生成,目前EF生成的Sql語句會比較複雜,在下一版本中将可能改善。

現在看來,EF正在成為一個優秀的ORM架構,将能極大的提高程式員的開發效率,能夠将程式員從資料通路層解脫出來,專注于業務邏輯層。當然,要掌握好EF,需要更加深入的學習,比如應該了解它都有哪些約定,應該了解一下它為我們生成的Sql語句,這樣有助于我們寫出高效的代碼。

本文轉自火地晉部落格園部落格,原文連結:http://www.cnblogs.com/yelaiju/archive/2012/02/27/2369527.html,如需轉載請自行聯系原作者