1,Model的職責:
Model只負責與數據處理相關的工作。
2,開發Model的基本觀念
采用ORM信息訪問技術開發
ORM是將結構化的關系型數據,映射成面向對象模型。對於EF來說,就是關系型數據庫與.NET原生對象的轉化。
3,從一個簡單的.NET類別,通過EF轉換到SQL Server數據庫
- 默認情況下,名稱為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后,並且在上下文文檔中聲明如下語句:
1 public DbSet<SharpL> Sharps { get; set; }
在訪問數據庫后,表格就自動生成了,如圖:
5,打開SQL server,打開數據庫關系圖,如下:
可以看出Memebers表中的NO字段是Guestbooks表中的外鍵,也就是member_NO字段,也就是說每一個Guestbook對應於一個Member,而一個Member可以有多個Guestbook。代碼如下:

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添加強類型視圖時,需要先對項目進行編譯。
出處:http://www.cnblogs.com/SharpL/p/4592725.html