摘要:Entity Framework 6.1.0 Tools for Visual Studio 2012 & 2013 已經可以下載了,來看看有什麼新東西....
Entity Framework 6.1.0 Tools for Visual Studio 2012 & 2013 已經於兩周前開放下載。安裝完成後,專案範本裡面可以看到一些變化。這裡用幾張 Visual Studio 2013 的截圖來比較安裝此工具前後的差異。
安裝前
在 Add New Item 對話窗裡面,原本是:
名稱預設會採用 .edmx 副檔名。點 Add 按鈕之後只有兩種範本可選:
安裝後
安裝 EF 6.1.0 Tools 之後,Add New Item 對話窗有一點小變化:
注意其中的 Name 欄位已經不會有預設的 .edmx 副檔名。這是因為增加了 Code First 模型範本,所以得等到下一個步驟,確定你選取了模型範本之後,才能決定要產生何種類型的檔案。
點 Add 鈕進入下一個步驟,裡面多出兩個選項:Empty Code First model 和 Code First from database。如下圖:
就我自己來說,平常仍以先有資料庫再產生 entity 類別的情形居多,因此看到 Code First from database(或稱為 Code Second)的設計方式已由微軟官方提供,是覺得挺開心的。
Entity Classes
下圖是利用 Code First from database 範本產生程式碼之後,Solution Explorer 中顯示的檔案清單:
這些由範本所產生的程式碼提供了一個很好的基礎,讓我們可以開始使用 Code First 的方式來發展模型。注意看一下這些程式碼,你不會在裡面看到任何警告你「不要修改這裡,以免發生錯誤。」的註解。這些由逆向工程所產生出來的 entity classes 本來就是要讓你修改的。
這裡摘列其中兩個類別的程式碼,以便參考。
首先是繼承自 DbContext 的 NorthwindModel 類別:
在呼叫父類別的建構函式時,傳入 "name=Northwind" 表示應用程式組態檔案裡面的 <connectionStrings> 元素裡面必須要有一個名稱為 "Northwind" 的連線字串。
另外值得注意的是 OnModelCreating 函式,這裡使用了 Fluent API 來設定 entity 的相關屬性。
除了在 DbContext 類別的 OnModelCreating 方法中利用 Fluent API 來設定 entities,還有一種寫法是在各 entity 類別中使用資料標記(Data Annotations)。參考底下的 Customer 類別:
在 entity 類別中使用資料標記的一個好處是別的地方也用得著,例如 MVC 的模型資料驗證。
官方網站有教學影片和更詳細的介紹,可參考這篇:Code First to an Existing Database。
延伸閱讀
Entity Framework 6.1.0 Tools for Visual Studio 2012 & 2013 已經於兩周前開放下載。安裝完成後,專案範本裡面可以看到一些變化。這裡用幾張 Visual Studio 2013 的截圖來比較安裝此工具前後的差異。
安裝前
在 Add New Item 對話窗裡面,原本是:
名稱預設會採用 .edmx 副檔名。點 Add 按鈕之後只有兩種範本可選:
安裝後
安裝 EF 6.1.0 Tools 之後,Add New Item 對話窗有一點小變化:
注意其中的 Name 欄位已經不會有預設的 .edmx 副檔名。這是因為增加了 Code First 模型範本,所以得等到下一個步驟,確定你選取了模型範本之後,才能決定要產生何種類型的檔案。
點 Add 鈕進入下一個步驟,裡面多出兩個選項:Empty Code First model 和 Code First from database。如下圖:
就我自己來說,平常仍以先有資料庫再產生 entity 類別的情形居多,因此看到 Code First from database(或稱為 Code Second)的設計方式已由微軟官方提供,是覺得挺開心的。
Entity Classes
下圖是利用 Code First from database 範本產生程式碼之後,Solution Explorer 中顯示的檔案清單:
這些由範本所產生的程式碼提供了一個很好的基礎,讓我們可以開始使用 Code First 的方式來發展模型。注意看一下這些程式碼,你不會在裡面看到任何警告你「不要修改這裡,以免發生錯誤。」的註解。這些由逆向工程所產生出來的 entity classes 本來就是要讓你修改的。
這裡摘列其中兩個類別的程式碼,以便參考。
首先是繼承自 DbContext 的 NorthwindModel 類別:
namespace DemoData.Models { using System; using System.Data.Entity; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; public partial class NorthwindModel : DbContext { public NorthwindModel() : base("name=Northwind") { } public virtual DbSet<Customer> Customers { get; set; } public virtual DbSet<Order> Orders { get; set; } public virtual DbSet<Order_Detail> Order_Details { get; set; } public virtual DbSet<Product> Products { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Customer>() .Property(e => e.CustomerID) .IsFixedLength(); modelBuilder.Entity<Order_Detail>() .Property(e => e.UnitPrice) .HasPrecision(19, 4); modelBuilder.Entity<Order>() .Property(e => e.CustomerID) .IsFixedLength(); modelBuilder.Entity<Order>() .Property(e => e.Freight) .HasPrecision(19, 4); modelBuilder.Entity<Order>() .HasMany(e => e.Order_Details) .WithRequired(e => e.Order) .WillCascadeOnDelete(false); } } }
在呼叫父類別的建構函式時,傳入 "name=Northwind" 表示應用程式組態檔案裡面的 <connectionStrings> 元素裡面必須要有一個名稱為 "Northwind" 的連線字串。
另外值得注意的是 OnModelCreating 函式,這裡使用了 Fluent API 來設定 entity 的相關屬性。
除了在 DbContext 類別的 OnModelCreating 方法中利用 Fluent API 來設定 entities,還有一種寫法是在各 entity 類別中使用資料標記(Data Annotations)。參考底下的 Customer 類別:
namespace DemoData.Models { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data.Entity.Spatial; public partial class Customer { public Customer() { Orders = new HashSet<Order>(); } [StringLength(5)] public string CustomerID { get; set; } [Required] [StringLength(40)] public string CompanyName { get; set; } [StringLength(60)] public string Address { get; set; } [StringLength(15)] public string City { get; set; } [StringLength(10)] public string PostalCode { get; set; } [StringLength(24)] public string Phone { get; set; } public virtual ICollection<Order> Orders { get; set; } } }
在 entity 類別中使用資料標記的一個好處是別的地方也用得著,例如 MVC 的模型資料驗證。
官方網站有教學影片和更詳細的介紹,可參考這篇:Code First to an Existing Database。
延伸閱讀
沒有留言: