EF-CodeFirst系列100】的更多相关文章

我们初始化数据库一节已经知道:EF为每一个具体的类生成了数据库的表.现在有了一个问题:我们在设计领域类时经常用到继承,这能让我们的代码更简洁且容易管理,在面向对象中有“has  a”和“is a”关系(如student has a name,student is a person--继承),然而数据库中只有“has a”关系.数据库管理系统并不支持继承,所以我们怎么去映射具有继承关系的领域类呢? EF CodeFirst中有三种方式表示继承体系: 1.TPH(table per hierarch…
这一节介绍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…
现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简单的类,一个是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属性的类集合,…
在前面的部分中,我们学习了Code-First默认约定,Code-First使用默认的约定,根据你的领域类,然后生成概念模型. Code-First模式,发起了一种编程模式:约定大于配置.这也就是说,当你需要的时候,你可以重写这些约定,通过配置你的领域类.这里有两种方式来配置你的领域类实体: DataAnnotations(数据注解) Fluent API(姑且翻译为:流畅API) 数据注解: 数据注解是基于配置的简单特性,你可以应用到你的领域类或者其属性中.你可能会发现大多数的特性都在这个命令…
1.什么是CodeFirst 从EF4.1开始,EF可以支持CodeFirst开发模式,这种开发模式特别适用于领域驱动设计(Domain Driven Design,大名鼎鼎的DDD).在CodeFirst模式中,我们不再先创建数据库,然后在程序中创建对应的类:CodeFirst开发模式中我们只关注应用程序的域(Domain)直接开始创建类,EF会根据我们创建的类自动生成数据库. CodeFirst的工作流程如下所示: 使用CodeFirst模式进行开发时,我们的开发流程是:创建/修改领域类--…
1. CodeFirst的默认约定 1.领域类和数据库架构的映射约定 在介绍数据库的初始化之前我们需要先了解领域类和数据库之间映射的一些约定.在CodeFirst模式中,约定指的是根据领域类(如Student,Grade类)自动配置概念模型的一些默认规则.在上一节的小栗子中,我们没有在领域类中做任何配置,但是EF API帮我们配置了主外键.关系.列的数据类型等,这就是约定在起作用.下表中列除了一些默认的CodeFirst约定: 默认规则 描述 Schema EF创建所有的DB对象都放在dbo架构…
FluentApi配置存储过程 1.EF自动生成存储过程 EF6的CodeFirst开发模式支持给实体的CUD操作配置存储过程,当我们执行SaveChanges()方法时EF不在生成INSERT,UPDATE,DELETE命令,而是生成CUD操作的存储过程,我们也可以给实体CUD操作指定自定义的存储过程. 一个栗子: 我们给学生实体的CUD操作设置存储过程,Student实体如下: class Student { public int StudentId { get; set; } public…
1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重写其中的Seed方法. 下边的栗子展示在School数据库中给Standard表添加默认的数据: 第一步:创建自定义初始化器 //继承三种内置的初始化器中的DropCreateDatabaseAlways public class SchoolDBInitializer : DropCreateDa…
前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切!!! 这个图解释了,数据库初始化的流程,是基于我们在上下文类中的构造函数中传递的参数. 在上面的图中,context类中的base构造器中,可以填入下面的参数: 无参数(No Parameter) 数据库的名字(Database Name) 连接字符串的名字(Connection String Na…