目录

1. Code First是什么?

2. Code First 简单示例

3. 数据存储

4. 迁移

Code First是什么

  Code First 顾名思义就是先写代码,当然不是乱写,而是按照一定的约定,先创建实体类,再通过编辑器自动生成数据模型。Code First是EF的三大模式之一,主要使用新的系统开发,对应数据库已存在的情况下不适合。

Code First 简单示例  

  下面通过一个简单的示例,让我们来熟悉一下Code First模式。

  第一步:创建一个控制台程序,命名为“EF.CodeFirstSample”。

  

  第二步:打开NuGet包管理界面,为上面新建的控制台程序安装EF。

  

  安装成功之后,我们就可以在引用下面看到EF组件,如下图:

  

  第三步:创建模型

  该示例中我们使用非常简单的模型,直接Program.cs文件中进行定义。

   在Program.cs中添加以下两个类:   

public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; } public virtual List<Post> Posts { get; set; }
} public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; } public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}

 第四步:创建上下文

  创建一个上下文,用于和数据库保持会话,以便我们查询和保存数据。我们定义一个派生自System.Data.Entity.DbContext的上下文,并为模型中每个类公开一个类型化DbSet<TEntity>。

 public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}

  第五步:读写数据

  实现program.cs中的Main方法,如下所示,这些代码为上下文创建一个新的实例,然后使用该实例为Blog表插入一条记录,然后在从数据库读取所有的Blog,并且把名称显示出来,具体代码如下:

 static void Main(string[] args)
{
using (var db = new BloggingContext())
{
Blog blog = new Blog() { Name = "this is a test Name!" };
db.Blogs.Add(blog);
db.SaveChanges(); foreach (var item in db.Blogs)
{
Console.WriteLine("Name:"+item.Name);
}
} Console.Read();
}

  

  运行结果

  

  运行结果显示,我们已经成功添加一条数据,并且成功读取显示出来,那我们的数据存储在哪里呢?

  数据在哪里

  如果本地Sql EXPRESS实例可用(默认情况下随vs2010安装)的话, 则Code First默认对该实例创建数据库;

  如果Sql EXPRESS实例不可用,则Code First将尝试使用LocalDb(默认情况下随vs2012安装);

  如果Sql EXPRESS和LocalDb同时存在,则Code First会优先使用Sql EXPRESS;

  如果两个都不存在,则运行就报错,所以需要自己在配置文件设置数据库连接字符串。

  由于我们只有LocalDb可用,所以运行之后在LocalDb中自定创建一个新的数据库和物理表,如下:

  

    数据迁移

  在实际开发中经常会设计表之后再修改表结构,那么对于Code First中修改表又是如何实现的呢?例如,现在为Blog类增加一个Url属性,如下:

  

再运行程序,会发现如下提示:

  

  提示信息非常明确,这个时候通过迁移来更新数据库。  

  第一步:打开NuGet控制台,输入"Enable-Migrations"启用Code First迁移。

  

  第二步:在控制台中输入“Add-Migration AddUrl”,其中AddUrl是迁移的名称,方便以后根据这个名称进行降级。

  

  第三步:在控制台中输入“Update-Database”,这个时候可能会因为当前项目不是启动项而报错,我们可以执行Update-Database的时候指定启动,这么我只是简单的将当前项目设置为启动项。

  

  至此,迁移工作完成,此时我们查看数据库会发现,Blog表中已经增加了URL字段,见下图:

  

ORM系列之二:EF(2)Code First的更多相关文章

  1. ORM系列之二:EF(5) Model First

    前面我们已经介绍过EF中Code First开发模式,简而言之,就是不管三七二十一直接写代码,不过对于很多开发人员来说,可能并不习惯这样来开发,并且安装标准的开发流程,应该是先建模再进行编码,当然EF ...

  2. ORM系列之二:EF(3) 数据库连接

    目录 1.前言 2.Code First默认连接 3.Code First指定数据库 4.自定义连接 前言 在介绍EF的Code First模式时候,我们没有修改任何配置,运行之后自动在LocalDb ...

  3. ORM系列之二:EF(1)

    目录 1. EF是什么 2. 如何获取EF 3. EF有哪些主要模式 EF是什么 EF全称为Entity Framework,是微软推荐的一种数据库访问技术,属于重量级的ORM框架,功能非常强大,目前 ...

  4. ORM系列之二:EF(4) 约定、注释、Fluent API

    目录 1.前言 2.约定 2.1 主键约定 2.2 关系约定 2.3 复杂类型约定 3.数据注释 3.1 主键 3.2 必需 3.3 MaxLength和MinLength 3.4 NotMapped ...

  5. 8天掌握EF的Code First开发系列之2 Code First开发系列之领域建模和管理实体关系

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 理解Code First及其约定和配置 创建数据表结构 管理实体关系 三种继承模式 本章小结 本人的实验环境是V ...

  6. 8天掌握EF的Code First开发系列之动手写第一个Code First应用

    返回<8天掌握EF的Code First开发>总目录 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 自我测试 上一篇<8 ...

  7. 8天掌握EF的Code First开发系列之5 视图、存储过程和异步API

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 视图View 存储过程 异步API 本章小结 咱们接着上一篇继续深入学习,这一篇说说Entity Framewo ...

  8. 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LI ...

  9. 8天掌握EF的Code First开发系列之2 简单的CRUD操作

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...

随机推荐

  1. 关于readonly修饰符

    修饰字段: 1.值类型:不能修改值 2.引用类型:是指该字段引用的对象不可以修改,但是里面的内容是可以修改的! 示例: static void Main(string[] args) { Consol ...

  2. 与你相遇好幸运,Postgresql和postgis安装

    笔者开发环境: windows 7 x86_64 一开始安装的是官网最新版 PostgreSQL 9.6 ,安装成功 之后安装PostGIS Bundle 2.2 for PostgreSQL x64 ...

  3. [MongoDB]Mongo基本使用:

    汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB ...

  4. 在Salesforce中向外公布Service去创建Lead,并且用Asp.Net去调用此Service

    1):在Salesforce中如何配置,向外公布此Service,请看如下链接: http://www.shellblack.com/marketing/web-to-lead/ 2):如何在Asp. ...

  5. Intel VT入门

    前言     传说中的VT貌似很神秘的样子,关于VT入门的资料又很少,于是研究了一番 由于资源有限,自身水平亦有限,并且是闭门造车之作,如有错误的地方请指正,不胜感激! 关于VT可以先参考海风月影写的 ...

  6. js整理4

    异步处理 错误处理 同步 function A() { B(); } function B() { C(); } function C() { throw new Error('something h ...

  7. Unity Standard Assets 简介之 Cameras

    这篇介绍Cameras资源包. 文件夹下有名为“CameraGuidelines.txt”的说明文档,简要介绍了各个预设的作用和用法. Prefabs文件夹: CctvCamera.prefab: 视 ...

  8. CS: Marshalling and Unmarshalling, Serialization and Unserialization

    Link1: https://en.wikipedia.org/wiki/Marshalling_(computer_science) Quote: " Comparison with se ...

  9. [转]passport.js学习笔记

    概述 passport.js是Nodejs中的一个做登录验证的中间件,极其灵活和模块化,并且可与Express.Sails等Web框架无缝集成.Passport功能单一,即只能做登录验证,但非常强大, ...

  10. Bulk_Collect_Performance 比较

    上一篇讲到了调用集锦,这篇关注一下性能问题吧. DECLARE CURSOR c_tool_list IS SELECT descr d1 FROM hardware; l_descr hardwar ...