初識EntityFramework6
什么是EF?
EF是一種ORM(Object-relational mapping)框架,它能把我們在編程時使用對象映射到底層的數據庫結構。比如,你可以在數據庫中建立一個Order表,讓它與程序中的Order類建立映射關系,這樣一來,程序中的每個Order對象都對應着Order表中的一條記錄,ORM框架負責把從數據庫傳回的記錄集轉換為對象,也可以依據對象當前所處的具體狀態生成相應的SQL命令發給數據庫,完成數據的存取工作(常見的數據存取操作可簡稱為CRUD:Create、Read、Update、Delete)。
EF的三種開發方式
EF支持三種開發模式: Code First、Database First和Model First。
方式一:Code First
對於初次接觸的人,EF的Code First實在很有點魔幻色彩。下面就讓我們來體會一下。 創建兩個類:Book(書)和BookReview(書評)。一本書可以有多條書評,因此,它們是一對多的關系:
- public class Book
- {
- public virtual int Id {get; set;}
- public virtual string Name { get; set; }
- public virtual List<BookReview> Reviews { get; set; }
- }
- public class BookReview
- {
- public int Id{get; set;}
- public int BookId { get; set; }
- public virtual string Content { get; set; }
- public virtual Book AssoicationWithBook { get; set; }
- }
好了,現在創建一個派生自DbContext的子類:
- public class BookDb : DbContext
- {
- public DbSet<Book> Books { get; set; }
- public DbSet<BookReview> Reviews { get; set; }
- }
現在可以在程序中隨意寫幾行代碼從數據庫中提取數據:
- static void Main(string[] args)
- {
- using (var context = new BookDb())
- {
- Console.WriteLine("數據庫中有{0}本書",context.Books.Count());
- }
- }
運行一下,如果計算機上安裝有SqlExpress,那么或者是在應用程序文件夾,或者是打開SQL Server Management Studio(SSME)查看本機SQLServer,你就會發現,數據庫己經創建好,其中的表及表的關聯也幫助你完成了:
貌似我什么也沒干,一切就OK了!
方式二:Database First
這是EF從1.0開始就支持的特性,其思路是:先設計並建好數據庫,然后使用Visual Studio的向導創建EF數據模型並生成實體類代碼。 這是最成熟穩定的方式,其設計器相當地完善,基本上能滿足實際開發中的各種需求。 我個人認為這是開發正式項目最合適的方式。
方式三:Model First
這種模式是先在可視化設計器中創建實體和它們間的關聯,然后設計器生成SQL命令並保存於一個SQL文件中,通過執行這一SQL文件完成數據庫的創建和修改工作。
PS:這種方式在EF7中好像以被取消,所以也不推薦再使用了。
上面部分內容摘錄自bitfan的專欄
比較CodeFirst和Database First
通過Code First構建數據庫雖然方便,不過EF幫我們生成的數據表結構真的很一般。在上面的例子中,在Code First生成的表內Name、Content、BookId都是可以為空的,也就是說沒有為它們建立約束。可要是使用Code First來建立約束就有點麻煩了,所以我們一般都不是通過代碼來生成數據庫,而是通過數據庫來反向生成代碼(Database First)。
這一節只是做個介紹,下一節我將演示一下如何使用EF連接數據庫,特別是MySQL數據庫。EF通過向導連接SQL Server基本上都是下一步,可連MySQL還需要些配置。
