[EntityFramework] EF Code First : Migration

此文章主要說明使用Enity Framework Code First 開發, 異動資料庫時的步驟及注意事項
[大綱]

  • Install EntityFramework
  • CodeFirst /Model First/Database First  如何選擇
  • 啟用Migration/新增Migration
    指令:
    Enable-Migrations
    Add-Migration
  • 更新資料庫 及產生異動相關Sql Script
    指令:
    Update-Database
  • 回復到初始狀態
  • 參考
  • install EntityFramework
    安裝EntityFramework
    PM>Install-Package entityframework
    • Code First/Model First/Database First ?
      如何選擇這些開發方式呢?:參考[4]   是開始動手之前要先考慮的重要課題

      Code First: New ADO.NET Entity Data Model /EF Wizard/Empty Code First Model
      適用於:1.已經有Domain Class  或是 還沒建立資料庫 ,想先開始寫Domain Class再產生資料庫的專案適用
                  2. 對資料庫有高度權限及設計主導權,或較不複雜的系統,需要快速開發者適用
                  3. Code First對開發者兼任系統設計或分析師的開發團隊是很適用
                     反之則不然,開發者對資料庫及系統設計若沒有太大的主導權,應該會受到很多限制
                     
      參考[1]

      Database First:New ADO.NET Entity Data Model /EF Wizard/EF Designer From Database
      適用於: 已經有資料庫schema,想使用EF 協助產生與DB Table對應的Class
      參考[2]

      Model First:New ADO.NET Entity Data Model /EF Wizard/Empty EF Desinger model 
      適用於:還沒有資料庫Schema,但想用EF Designer 來設計Model
      參考[3]
  • Code First​
    1. 建立實體Table 相關 class
      1. e.g
        Users
        Roles
      2. 建立Context Class
        
                public class SystemContext : DbContext
                {
                    public DbSet<User> Users { get; set; }
                    public DbSet<Role> Roles { get; set; }
        
                    public SystemContext()
                        : base("name=DBConnection")
                    {
        
                    }
                }
  • 啟用Migration/新增Migration
    e.g
    Nuget Package Manager
    1.PM>Enable-Migrations -EnableAutomaticMigrations -Force  -AutomaticMigrationDataLossAllowed  
       啟用後-->會自動新增設定DbContext參數 於 /Migrations/Configurations.cs
    2.PM>Add-Migration firstinit       #firstinit 為migration name #版本:1
    3.開發,修改欄位(修改Role.ID為int)
    4.PM>Add-Migration secondMigration      #版本:2
    5.開發,修改欄位(修改Role.CreateUser為varchar)
    6.PM>Add-Migration thirdMigration          #版本:3