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進行數據庫更新,重新運行成功

