1,Model的職責:html
Model只負責與數據處理相關的工做。數據庫
2,開發Model的基本觀念ide
採用ORM信息訪問技術開發post
ORM是將結構化的關係型數據,映射成面向對象模型。對於EF來講,就是關係型數據庫與.NET原生對象的轉化。ui
3,從一個簡單的.NET類別,經過EF轉換到SQL Server數據庫this
- 默認狀況下,名稱爲Id的屬性在數據庫中建立完成以後,會被標識成主鍵,且需被設置爲Int類型,由於是值類型,不容許爲Null。
- 同理DateTime也是值類型,不容許爲Null。
- string爲引用類型,轉換爲數據庫類型爲nvarchar(Max),容許爲空。
- 任何EF中的模型,均須要設置主鍵,不然會觸發異常,默認狀況下主鍵爲聲明爲id的int類型屬性。若是想設置其餘屬性爲主鍵,需添加[Attribute]屬性。
- 若是設置的任意主鍵爲int類型,會被自動加上自動編號的屬性(即咱們常說的主鍵+1)。
- 若是設置某一列不容許爲空,爲該列添加[Required]屬性。
- 聲明容許NULL字段,好比DateTime默認不容許爲空,以下設置:public DateTime? CreateOn{get;set;}
- 設置字符串長度,添加MaxLength屬性,[MaxLength(200)]
- 聲明字段默認值,好比說添加到數據庫的時間,AddTime,取數據庫當前時間就能夠了。添加以下屬性:[DatabaseGenerated(DatabaseGeneratedOption.Computed]
4,在CodeFirst模式中,聲明Model後,而且在上下文文檔中聲明以下語句:spa
1 public DbSet<SharpL> Sharps { get; set; }
在訪問數據庫後,表格就自動生成了,如圖:code
5,打開SQL server,打開數據庫關係圖,以下:server
能夠看出Memebers表中的NO字段是Guestbooks表中的外鍵,也就是member_NO字段,也就是說每個Guestbook對應於一個Member,而一個Member能夠有多個Guestbook。代碼以下:htm
1 public class Member 2 { 3 #region 其餘字段 4 [Key] 5 public int NO { get; set; } 6 [Required] 7 [MaxLength(5)] 8 public string Name { get; set; } 9 10 [MaxLength(200)] 11 public string Email { get; set; } 12 #endregion 13 14 public ICollection<Guestbook> GuestBooks { get; set; } 15 } 16 17 public class Guestbook 18 { 19 #region 其餘字段 20 [Key] 21 public int NO { get; set; } 22 23 [Required] 24 public string Content { get; set; } 25 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 26 public DateTime? CreateOn { get; set; } 27 #endregion 28 29 public Member member { get; set; } 30 }
6,注意新建Model模型之後,必須編譯之後,部分功能才能使用,如在Model文件夾下,新建一個Context類,想開啓數據庫自動遷移的功能(該功能詳見Will哥MVC4 5.5),必須先進行編譯,不然在使用 Enbale-Migrations 命令時,是沒法經過的。一樣的道理是,在爲Controller添增強類型視圖時,須要先對項目進行編譯。