1.選擇MVC3 Web應用程式項目
2.選擇空模板,視圖引擎我們選擇Razor
3.項目建立後,我們能看到預設的JS都不是最新的,所以我們使用NuGet來更新項目內相關組件包
4.在項目上右鍵,選擇管理Nuget程式包
5.Nuget會列出項目中所有可更新的組件,我們需要更新Jquery,Jquery UI和Entity Framework到最新版本,點擊安裝即可
6.更新後我們可以看到相關檔案已經全部到最新版本
7.環境已經搭好,現在建立一個簡單的系統,資料庫有一張使用者表Tbl_User,使用者可以登入,修改等操作,系統使用EF的新特性——資料庫遷移,我們不直接操作任何資料表的建立,全部通過EF自動產生
建立Tbl_User表的對應model,我們命名為Tbl_User(在自動建立的時候,類名就是資料庫表名)
我們在專案檔夾Models中建立了以下Tbl_User的Model
public class Tbl_User { [DisplayName("ID")] [Key] public Guid ID { get; set; } [DisplayName("使用者名稱")] [StringLength(20, ErrorMessage = "用輸入使用者名稱")] [Required] public string name { get; set; } [DisplayName("密碼")] [StringLength(20, MinimumLength = 6, ErrorMessage = "密碼至少輸入6位")] [DataType(DataType.Password)] [Required] public string pwd { get; set; } [DisplayName("郵箱")] [DataType(DataType.EmailAddress)] public string email { get; set; } [DisplayName("年齡")] [StringLength(1)] public int age { get; set; } [DisplayName("建立時間")] [Required] public DateTime? datetime_create { get; set; }//使用可空類型,在介面綁定時,在沒有值的情況下可讓綁定後產生的文字框為空白 }
通過給各個屬性添加各自的Attribute,來對屬性進行約束;在理想狀態下,我們的介面甚至不用手動添加屬性的描述性文字
在使用Attribute時,需要引入以下命名空間
using System.ComponentModel;using System.ComponentModel.DataAnnotations;
常用Attribute
Required: |
指定為必要欄位,即指定資料庫對應的列不允許為 null 值 |
StringLength: |
指定欄位的長度範圍,最小長度 |
NotMapped: |
沒有對應關係,即此欄位不會在資料庫中產生對應的列 |
Key: |
指定對應資料庫中為主鍵欄位 |
DisplayName: |
屬性顯示的名稱 |
DataType: |
指定要與資料欄位關聯的附加類型的名稱,有個名字為DataType的枚舉,用來指定資料類型,並會對其建立對應的驗證規則和產生方式 |
我們通過EF自動產生Tbl_User的相關增刪改查操作和對應介面,在專案檔夾上右鍵,建立名字為UserController的控制器(控制器名稱中的尾碼Controller不能修改,這是MVC的預設約定),選擇模板為包含讀寫和視圖的EF控制器,模型類選擇剛才我們建立的Tbl_User(需要編譯一次才能顯示),資料內容我們使用自動建立的的MvcDemoContext
完成後,VS會自動幫我們產生MvcDemoContext,UserController和UserController對應的視圖檔案夾View/User(包括查詢,建立,編輯,詳細,刪除頁面)
通過資料庫遷移自動產生資料庫,在web.config檔案中,建立SQL資料庫連接,命名為MVCDemoServices
<connectionStrings> <add name="MVCDemoServices" connectionString="Data Source=.;Initial Catalog=MVCDemo;Persist Security Info=True;User ID=sa;Password=123456" providerName="System.Data.SqlClient" /></connectionStrings>
在MVCDemoContext 內容相關的建構函式中,指定資料庫連接
public class MVCDemoContext : DbContext{ public MVCDemoContext() : base("MVCDemoServices") { } public DbSet<Tbl_User> Tbl_User { get; set; }}
使用PM控制台,進行資料庫遷徙
- 輸入Enable-Migrations自動組建檔案夾Migrations和檔案Configuration.cs
- 輸入Add-Migration CreateUser,自動在檔案夾Migrations下產生版本檔案
- 輸入Update-Database自動建立或者更新資料庫
- 我們進SQL Server Management Studio後探索資料庫MVCDemo已經被建立好了
遷移命令: |
Enable-Migrations //啟用資料庫遷移並建立檔案夾 |
|
Add-Migration AddAuthor // AddAuthor 是任意名,是版本戳記 |
|
Update-Database //更新資料庫 |
|
Update-Database –TargetMigration:"xxx" //即可回溯資料庫到指定版本 XXX為指定版本,不帶.cs,例如:201206171450182_Deletetest |
|
先產生EF代碼才能使用更新資料庫 |
現在運行下系統,輸入http://localhost:3556/user,MVC預設首頁是http://localhost:3556/Home,預設訪問index頁面,我們沒有這個目錄,所以我們運行http://localhost:3556/user,會訪問到index頁面
- 接著,建立一個新的使用者,發現當初Tbl_User的model寫錯了,年齡的欄位長度設為了1,我們返回model進行修改,去除年齡欄位的字元長度
[DisplayName("年齡")]public int age { get; set; }
- 在生產的資料庫中,我們發現email欄位的類型是nvachar(max),實際email不需要這麼長,修改為100字元長度即可
[DisplayName("郵箱")] [DataType(DataType.EmailAddress)] [StringLength(100)]public string email { get; set; }
- 原因是我們修改了Model中欄位的資料欄位長度,但資料庫中並沒有進行修改,所以我們需要使用EF的資料庫遷徙,進行資料庫更新
- 開啟PM控制台,輸入Add-Migration UpdateTbl_User,產生更新檔案
- 再輸入Update-Database進行資料庫更新,重新運行成功