1.什么是CodeFirst

  从EF4.1开始,EF可以支持CodeFirst开发模式,这种开发模式特别适用于领域驱动设计(Domain Driven Design,大名鼎鼎的DDD)。在CodeFirst模式中,我们不再先创建数据库,然后在程序中创建对应的类;CodeFirst开发模式中我们只关注应用程序的域(Domain)直接开始创建类,EF会根据我们创建的类自动生成数据库。

CodeFirst的工作流程如下所示:

使用CodeFirst模式进行开发时,我们的开发流程是:创建/修改领域类-->配置领域类(使用Fluent API或者注释属性)-->新建/修改数据库架构(使用自动迁移或者代码迁移)

2.CodeFirst的简单入门案例

添加一个名字为EF6Console的控制台应用程序,然后把EF引入到项目中,如下图:

添加了EF后我们就可以就行EF的CoreFirst开发了

第一步:添加领域类

首先添加两个Student和Grade类(学生和年纪),它们是一对多关系,一个年级有多个学生,而一个学生只能有一个年级,代码如下:

public class Student
{
public int StudentID { get; set; }
public string StudentName { get; set; }
public DateTime? DateOfBirth { get; set; }
public byte[] Photo { get; set; }
public decimal Height { get; set; }
public float Weight { get; set; } public Grade Grade { get; set; }
}
public class Grade
{
public int GradeId { get; set; }
public string GradeName { get; set; }
public string Section { get; set; } public ICollection<Student> Students { get; set; }
}

第二步:添加context上下文

CodeFirst模式也需要一个context上下文类,和DbFirst开发不同,在CodeFirst模式中context类需要我们自己创建,context类继承DbContext,代码如下:

    public class SchoolContext : DbContext
{
     //构造函数
public SchoolContext() : base()
{
}
     //每个类设置一个的DbSet属性
public DbSet<Student> Students { get; set; }
public DbSet<Grade> Grades { get; set; }
}

完成了这两步,SqlServer的CodeFirst简单入门就结束了,是不是特别方便?

我们在程序中添加一个Student,代码如下:

    class Program
{
static void Main(string[] args)
{
using (var ctx=new SchoolContext())
{
Student student = new Student() { StudentName = "bill" };
ctx.Students.Add(student);
ctx.SaveChanges();
Console.WriteLine("初始化完成");
}
}
}

执行后数据库就自动创建了,如下图所示

  因为没有添加任何关于context的设置,所以EF安装默认规则在vs内置的sqlserver中给我们创建了 数据库,名字是EF6Console.SchoolContext(项目名.上下文名),同时给Student和Grade领域类生成了dbo.Studentsdbo.Grades(dbo.class复数)表。表中的每个列对应类的属性,后缀有Id(如studentId)的设置为主键和外键,实体实例生成了数据库的记录。当切换到CodeFirst开发时,感觉整个项目看起来都清爽了~

注意:这时如果修改类(如Student类)的话,运行程序时会抛出异常。如我们把Student类的体重属性注释了,如下所示

    public class Student
{
public int StudentId { get; set; }
public string StudentName { get; set; }
public DateTime? DateofBirth { get; set; }
public byte[] Photo { get; set; }
public decimal Height { get; set; }
//public float Weight { get; set; } public Grade Grade { get; set; }
}

然后运行程序,出现

这时因为领域类(Student)改变了导致数据库中dbo.Students表的列也要随着改变,这就需要我们定义一个数据库的迁移策略(database initialization strategy),在以后的章节会介绍。

EF CodeFirst系列(1)---CodeFirst简单入门的更多相关文章

  1. 【java开发系列】—— spring简单入门示例

    1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...

  2. 系列文章--oracle简单入门教程

    oracle入门很简单:八.oracle数据表 1.创建oracle数据表创建oracle数据表的语法如下: create table命令用于创建一个oracle数据表:括号内列出了数据表应当包含的列 ...

  3. 【java开发系列】—— struts2简单入门示例

    前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了js ...

  4. 2.简单的Code First例子(EF Code-First系列)

    现在假想,我们想要为讴歌学校创建一个应用程序,这个程序需要能够来添加或者更新学生,分数,教师还有课程信息. 代替之前我们的做法:先是创建数据库,现在我们不这么做,我们先来创建领域类,首先我来创建两个简 ...

  5. 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...

  6. 3.翻译系列:EF Code-First 示例(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspx EF 6 Code-Firs ...

  7. 6.翻译系列:EF 6 Code-First中数据库初始化策略(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-firs ...

  8. 8.翻译系列: EF 6中配置领域类(EF 6 Code-First 系列)

    原文地址:http://www.entityframeworktutorial.net/code-first/configure-classes-in-code-first.aspx EF 6 Cod ...

  9. 21.翻译系列:Entity Framework 6 Power Tools【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/entity-framework-power-tools.aspx 大家好,这里就是EF ...

随机推荐

  1. CentOS7中利用Xshell6向虚拟机本地上传文件

    环境交代 Linux系统:CentOS7, Xshell版本:6 操作步骤 下面我们以一个文件上传来演示用法 第一步 建立连接,这里不多说 在Xshell中点击如下图标,或者直接按 Alt+Ctrl+ ...

  2. pymysql的使用

    import pymysql #打开数据库 (如果连接失败会报错)#db = pymysql.connect(host = '127.0.0.1', port = 3306, user = 'minb ...

  3. C#中@的作用

    1.在书写文件路径时,消除"/"的转义功能 string FileDirect = "C:\Text\Debug\Text.txt"; \\编译会报错 stri ...

  4. centos7下git版本升级及gitlab安装

    centos系统自带的git版本过低,当使用git拉取.推送.克隆的时候可能会报错,常见的错误: error: The requested URL returned error: 401 Unauth ...

  5. 干货:Vue粒子特效(vue-particles插件)

    转:https://www.jianshu.com/p/53199b842d25 image.png 图上那些类似于星座图的点和线,是由vue-particles生成的,不仅自己动,而且能与用户鼠标事 ...

  6. Vmware10中Centos7挂载Windows主机的共享文件夹,提示:Error: cannot mount filesystem: No such device

    1.设置共享权限 2.安装VMware tools 点击虚拟机 点击安装 VMware tools 将/run/media/zhaojq/VMware\ Tools 目录下的VMwareTools-9 ...

  7. SpringBoot 数据篇之使用JDBC

    SpringBootTutorial :: Data :: Jdbc 简介 API execute update query 实战 配置数据源 完整示例 引申和引用 简介 Spring Data 包含 ...

  8. openstack搭建之-glance配置(9)

    一. base节点配置 #设置数据库,创建glance数据库,并设置权限 mysql -u root -proot CREATE DATABASE glance; GRANT ALL PRIVILEG ...

  9. Mac之brew使用

    brew : 终端程序管理工具 能让你更快速的安装你想要的工具.而不用考虑大量的依赖. 安装命令 给官网的一样也可以自己去官网查看 它就类似于centos下的yum 和 Ubuntu下的apt-get ...

  10. ZabbixServer安装

    Zabbix服务端安装主要分二种一直yum在线安装,一种离线安装,在线安装只需简单命令自己便可安装离线安装得自定义路径等等...比较繁琐不过便于文件管理.这里简单配置一下在线安装. https://w ...