摘要: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。
延伸閱讀





沒有留言: