小白学习之Code First(二)

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

小白学习之Code First(二)的相关文章

Python小白学习之路(二十)—【打开文件的模式二】【文件的其他操作】

打开文件的模式(二) 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码.图片文件的jgp格式.视频文件的avi格式) rb:   以字节方式读文件 wb: 以字节方式写文件ab: 以字节方式追加文件 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,所以不能指定编码 1. rb #错误举例 f = open ('test1.py', 'rb', encoding = 'utf

小白学习之Code First(三)

上下文Context类中的base构造器的几个方法重置(1.无参 2.database name 3 . 连接字符串) 无参:如果基类base方法中无参,code first将会以 :{Namespace}.{Context class name} 为名字创建一个服务 1 public class CSContext:DbContext 2 { 3 public CSContext():base("name=ConnStr") //创建名为配置文件中指定的数据库 4 { 5 } 6 /

Python小白学习之路(二十二)—【生成器】

一.什么是生成器? 生成器可以理解成是一种数据类型,特殊地是生成器可以自动实现迭代器协议其他的数据类型需要调用自己内置的__iter__方法所以换种说法,生成器就是可迭代对象 !回忆:很重要的迭代器协议 对象必须提供一个 next 方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 二.生成器的分类(两类) python中生成器的表现形式 python中提供生成器的方式 一类是生成器函数:另一类是生成器表达式 第一类:关于生成

【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型

[Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示

Android学习路线(十二)Activity生命周期——启动一个Activity

先占个位置,过会儿来翻译,:p Unlike other programming paradigms in which apps are launched with a main()method, the Android system initiates code in an Activity instance by invoking specific callback methods that correspond to specific stages of its lifecycle. Th

汇编入门学习笔记 (十二)—— int指令、port

疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引发一个n号中断. 运行过程相当于: (1)取中断类型吗n. (2)标志寄存器入栈:设置IF=0,TF=0. (3)CS.IP入栈 (4)(IP)=(n*4),(CS)=(n*4+2) 样例1:编写.安装中断7ch.实现求一个word型数据的平方,用ax存放这个数据. assume cs:code code s

css学习归纳总结(二) 转

原文地址:css学习归纳总结(二) 标签与元素 <p>标签和p元素有什么区别呢?大多数时候他们表示的是同一样东西,但仍有细微的区别.<p>.<div>等指的是HTML分隔符,而元素则是由一对开始结束标签构成的,用来包含某一些内容 子选择器和后代选择器的区别: 后代选择器的写法就是把外层的标记写在前面,内层的标记写在后面,之间用空格分隔. 子选择器只对直接后代有影响的选择器,而对“孙子后代”以及多层后代不产生作用. 注意:在IE6中,只支持后代选择器,不支持子选择器 链接

汇编入门学习笔记 (十二)—— int指令、端口

疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.端口 参考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引发一个n号中断. 执行过程相当于: (1)取中断类型吗n. (2)标志寄存器入栈:设置IF=0,TF=0. (3)CS,IP入栈 (4)(IP)=(n*4),(CS)=(n*4+2) 例子1:编写.安装中断7ch,实现求一个word型数据的平方,用ax存放这个数据. assume cs:code code seg

EOS小白学习(五)EOS的HTTP API

欢迎来到EOS小白学习系列,本系列会记录EOS学习过程中的一些操作和细节,大饼果子非C++出身,如有错误,欢迎指出 接上一篇: 本篇将会列出EOS支持的HTTP API(chain和history),没有过多的讲解,只是方便大家调用 1. chain/get_info(请求链的信息) POST: http://127.0.0.1:8888/v1/chain/get_info BODY: 什么都不需要填 {} RESPONSE: { "server_version": "756