1. 程式人生 > >EntityFramework Code-First教程(一)

EntityFramework Code-First教程(一)

不錯 iis entity [] com stand tab standard ron

前言:學習了EF框架這麽久,還沒有好好總結一番,正好遇到一國外的網站,發現不錯,隨即翻譯過來,一是讓自己復習一遍,二是供廣大初學者學習,翻譯過程中加入了一些自己的理解,如有錯誤,還請指出,多謝多謝。好了,進入正題

EF框架有三種設計模式:Code-First、Model-First、Database-First,本篇討論Code-First

(EF6已開源,網址:http://entityframework.codeplex.com/)

  • 什麽是Code-First?

  Entity Framework 從EF4.1開始包含Code-First模式,Code-First主要用在Domain Driven Design(領域驅動設計)中。在Code-First模式中,我們針對每一個功能要求創建一個模型類(Domain Class),把關註點放在一個領域裏,Code-Fiist 將會根據我們的模型類和配置自動創建數據庫。

技術分享圖片

  

  當我們程序運行的時候,Code-First會創建一個新的數據庫(如果不存在),並根據默認約束把模型類映射到數據庫表裏,一個類對應一張表,我們可以使用DataAnnotation或者fluent API配置模型類來重寫默認約定。先別急,後面會一一介紹。

所以Code-First設計的工作流程應該是:

  編寫模型類和context類→配置映射要求→運行程序→創建新的數據庫或者用模型類映射已存在的數據庫→錄入測試數據→發布最終應用程序

  • 環境配置

開發環境及工具:

  • .NET Framework 4.5
  • Visual Studio 2013
  • MS SQL Server 2008/2012 Express

用Nuget安裝EF,在解決方案上右鍵,選中NuGet

技術分享圖片

搜索EntityFramework

技術分享圖片

點擊安裝

技術分享圖片

安裝完成後,在我們項目引用裏面就有了EntityFramework的程序集,我們點右鍵屬性,發現版本是6.0

技術分享圖片

這樣,EF環境就搭好了。

  • 一個簡單的示例

假定我們為某學校創建一個應用程序,那麽這個程序應該能夠添加或修改學生信息、年級信息、教師信息和課程信息。

讓我們先忘記數據庫設計,我們先來為“學校”這個領域創建各種類,首先,我們創建兩個簡單的類,Student和Standard,這裏,每個Student裏面又包含了一個Standard類。

技術分享圖片
public class Student
{
    public Student()
    { 
        
    }
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public byte[]  Photo { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }
        
    public Standard Standard { get; set; }
}
技術分享圖片

這個Standard(年級類)應該包含了多個Student,一個班上肯定有很多不同的學生,所以這是“one-to-many”(一對多)的關系。

技術分享圖片
public class Standard
{
    public Standard()
    { 
        
    }
    public int StandardId { get; set; }
    public string StandardName { get; set; }
    
    public ICollection<Student> Students { get; set; }
   
    }
}        
技術分享圖片

模型類寫好了,我們就要開始寫DbContext,下面我們創建一個SchoolContext類,繼承於DbContext,並且以我們剛剛創建的兩個模型類為泛型,顯示定義的兩個DbSet<T>屬性,屬性名約定為復數形式(約定大於配置,在ASP.NET中這是很重要的一個設計理念)。註意,每一個模型類,都必須在DbContext中定義一個與之對應的DbSet<T>屬性,代碼如下:

技術分享圖片
namespace EF_Code_First_Tutorials
{
        
    public class SchoolContext: DbContext 
    {
        public SchoolContext(): base()
        {
            
        }
            
        public DbSet<Student> Students { get; set; }
        public DbSet<Standard> Standards { get; set; }
            
    }
}
技術分享圖片

現在,我們可以在主程序裏實例化一個SchoolContext,然後添加學生信息了。

技術分享圖片
class Program
{
    static void Main(string[] args)
    {
     
        using (var ctx = new SchoolContext())
        {
            Student stud = new Student() { StudentName = "New Student" };
        
            ctx.Students.Add(stud);
            ctx.SaveChanges();                
        }
    }
}
技術分享圖片

如果我們運行程序,就會插入一條學生信息到數據庫裏。

到這裏你肯定很奇怪,數據庫在哪兒?表是什麽樣?表中各列又是什麽樣?別急,讓我們打開數據庫一探究竟。

技術分享圖片

這就是Code-First模式神奇的地方,它會自動幫我們創建數據庫,並且以傳入DbContext的構造函數中的參數來命名創建的數據庫,因為上面實例化SchoolContext我們並沒有傳任何參數進去,所以它默認會以"項目名稱.Context名"來命名數據庫。如你所見,數據庫裏已經根據我們上面寫的兩個模型類創建了兩張表,表的各個列就是類的各個屬性。

註意:StudentId和StandardId自動設置為主鍵,Students表裏自動創建了一個Standard_StandardId的外鍵,這是因為Student類裏有一個Standerd類的屬性,你肯定疑問怎樣定義外鍵名,那下篇我們就來介紹Code-First約定。

EntityFramework Code-First教程(一)