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 }
尽管CSContext中没有定义Teacher这个类,但是运行程序后,code first照样为我们生成对应的数据库表
code first推断出类,生成对应的数据库表及其主外键,主键默认的规则为类的属性名是否是id或类名+id,如果不是,就会报错。
StudentInfo中定义了ClassInfo导航属性,而ClassInfo中定义了ICollection<StudentInfo>导航属性,那么code first自动为我们创建一对多的关系
时间: 2024-11-06 15:51:46