我们已经知道了在OnModelCreating()方法中可以通过FluentApi对所有的实体类进行配置,然而当实体类很多时,我们把所有的配置都放在OnModelCreating()方法中很难维护.EF6允许我们给每一个实体添加一个单独的配置类,通过这个配置类来对相应的实体进行配置. 以配置Student实体类为例,我们在OnModelCreating()方法中配置Student实体,代码如下: public class SchoolDBContext: DbContext { public S…
FluentApi配置存储过程 1.EF自动生成存储过程 EF6的CodeFirst开发模式支持给实体的CUD操作配置存储过程,当我们执行SaveChanges()方法时EF不在生成INSERT,UPDATE,DELETE命令,而是生成CUD操作的存储过程,我们也可以给实体CUD操作指定自定义的存储过程. 一个栗子: 我们给学生实体的CUD操作设置存储过程,Student实体如下: class Student { public int StudentId { get; set; } public…
这一节介绍EF CodeFirst模式中的1对0/1,1对多,多对多关系的配置,只有梳理清楚实体间的关系,才能进行愉快的开发,因此这节虽然很简单但是还是记录了一下. 1. 1对0/1关系配置 1. 通过数据注释属性配置1对0/1关系 我们将要实现一个Student和StudentAddress实体的1对0/1关系,1对0/1关系指的是一个Student可有一个或者零个住址StudentAddress,但是一个StudentAddress必须对应一个Student.在数据库中表现形式是Studen…
FluentApi总结 1.FluentApi简介 EF中的FluentApi作用是通过配置领域类来覆盖默认的约定.在EF中,我们通过DbModelBuilder类来使用FluentApi,它的功能比数据注释属性更强大. 使用FluentApi时,我们在context类的OnModelCreating()方法中重写配置项,一个栗子: public class SchoolContext: DbContext { public DbSet<Student> Students { get; set…
一.One-to-One Relationship[一对一关系] 两个表之间,只能由一个记录在另外一个表中.每一个主键的值,只能关联到另外一张表的一条或者零条记录.请记住,这个一对一的关系不是非常的普遍,并且大多数的一对一的关系,是商业逻辑使然,并且数据也不是自然地.缺乏这样一条规则,就是在这种关系下,你可以把两个表合并为一个表,而不打破正常化的规则. 为了理解一对一关系,我们创建两个实体,一个是User另外一个是UserProfile,一个User只有单个Profile,User表将会有一个主…
我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has  a”和“is a”关系(如student has a name,student is a person--继承),然而数据库中只有“has a”关系.数据库管理系统并不支持继承,所以我们怎么去映射具有继承关系的领域类呢? EF CodeFirst中有三种方式表示继承体系: 1.TPH(table per hierarch…
在前面的部分中,我们学习了Code-First默认约定,Code-First使用默认的约定,根据你的领域类,然后生成概念模型. Code-First模式,发起了一种编程模式:约定大于配置.这也就是说,当你需要的时候,你可以重写这些约定,通过配置你的领域类.这里有两种方式来配置你的领域类实体: DataAnnotations(数据注解) Fluent API(姑且翻译为:流畅API) 数据注解: 数据注解是基于配置的简单特性,你可以应用到你的领域类或者其属性中.你可能会发现大多数的特性都在这个命令…
现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简单的类,一个是Student类,一个是Standard类. 每个学生都有一个分数,下面看代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Thr…
前面,我们已经了解了Code-First利用领域类,怎么为我们创建数据库的简单示例.现在我们来学习一下Code-First约定吧. 什么是约定 约定说白了,就是基于一套规矩办事,这里就是基于你定义好的领域类,然后根据默认的规矩来配置概念模型.Code-First约定定义在这个命名空间下面: System.Data.Entity.ModelConfiguration.Conventions 现在来大致浏览一下都有哪些约定吧: 类型发现 在前面的章节中,我们在上下文类中创建了DbSet属性的类集合,…
1.什么是CodeFirst 从EF4.1开始,EF可以支持CodeFirst开发模式,这种开发模式特别适用于领域驱动设计(Domain Driven Design,大名鼎鼎的DDD).在CodeFirst模式中,我们不再先创建数据库,然后在程序中创建对应的类:CodeFirst开发模式中我们只关注应用程序的域(Domain)直接开始创建类,EF会根据我们创建的类自动生成数据库. CodeFirst的工作流程如下所示: 使用CodeFirst模式进行开发时,我们的开发流程是:创建/修改领域类--…