1. 程式人生 > >小白學習之Code First(二)

小白學習之Code First(二)

文件中 build 默認 dbm pcre student 技術分享 使用 類名

Code First約定:

註:EDMX模板 (SSDL:存儲模型=>數據庫表 ,CSDL:概念模型=>實體,C-S模型=>存儲和概念模型之間的映射關系)

System.Data.Entity.ModelConfiguration.Conventions 命名空間

此命名空間包含描述一組規格的類,在使用code first的時候,這些規則用於自動基於類定義配置概念模型(實體類)

在上下文中我們創建了DbSet類集合,CodeFirst會根據DbSet為我們創建數據庫表

技術分享
 1     public class StudentInfo
 2     {
 3         public
int ID { get; set; } 4 public string Name { get; set; } 5 public char Gender { get; set; } 6 public DateTime Birth { get; set; } 7 8 public ClassInfo ClassInfo { get; set; } 9 10 public Teacher Teacher { get; set; } 11 } 12 public class Teacher
13 { 14 public int ID { get; set; } 15 public string Name { get; set; } 16 } 17 public class CSContext:DbContext 18 { 19 public CSContext():base("name=ConnStr") //創建名為配置文件中指定的數據庫 20 { 21 } 22 //學生和班級的集合 23 public DbSet<StudentInfo> StudentInfos { get
; set; } 24 public DbSet<ClassInfo> ClassInfos { get; set; } 25 /// <summary> 26 /// 派生上下文模型初始化後,該模型鎖定之前 27 /// </summary> 28 /// <param name="modelBuilder">DbModelBuilder 用於將 CLR 類映射到數據庫架構。 此以代碼為中心的方法稱作“Code First”,可用於生成實體數據模型 (EDM) 模型</param> 29 protected override void OnModelCreating(DbModelBuilder modelBuilder) 30 { 31 // 首次訪問數據庫時調用數據庫初始值設定項 默認值是:CreateDatabaseIfNotExists<TContext> 32 //下面的值為模型發生改變時,刪除數據庫重建數據庫 33 Database.SetInitializer(new DropCreateDatabaseIfModelChanges<CSContext>()); 34 base.OnModelCreating(modelBuilder); 35 } 36 }
View Code

盡管CSContext中沒有定義Teacher這個類,但是運行程序後,code first照樣為我們生成對應的數據庫表

技術分享

code first推斷出類,生成對應的數據庫表及其主外鍵,主鍵默認的規則為類的屬性名是否是id或類名+id,如果不是,就會報錯。

StudentInfo中定義了ClassInfo導航屬性,而ClassInfo中定義了ICollection<StudentInfo>導航屬性,那麽code first自動為我們創建一對多的關系

小白學習之Code First(二)