EntityFramework Code-First 簡易教程(一)


 前言:學習了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();                
        }
    }
}

 

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

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

Entity Framework code-first example

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM