目录

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. Effective Python2 读书笔记3

    Item 22: Prefer Helper Classes Over Bookkeeping with Dictionaries and Tuples For example, say you wa ...

  2. laravel安装笔记

    一.安装composer 安装之前将\php\php.ini文件中的php_openssl.dll扩展库开启,否则composer在安装过程中会出现错误提示. (我在安装过程中发现apache目录下的 ...

  3. float 比较, 这是一个坑

    为了方便随机关键产品数据,做了一个随机值列的方案,列字段类型设置为float. 在测试的两个随机值的时候, 故意设置了几个随机值相同保存到数据库表中, 这样问题就出来了. 详细如下: 当进行小于比较的 ...

  4. php上传图片文件常用的几个方法

    1. 前台 <form class="add-form" method="post" action="/person/save" en ...

  5. HTML中图像代替提交按钮

    1. 用图像代替提交按钮 当只有一个提交按钮的时候 ,可以简单的实现,不用添加事件函数,代码是: <input type = "image"' name = ".. ...

  6. MapKit/CoreLocation框架 总结

    MapKit/CoreLocation框架 /*英译 core:核心 track:踪迹 current:当前 statellite:卫星 hybird:混合  region:范围 annotation ...

  7. C# 显示问题

  8. Linux之CentOS 常用命令

    软件安装:安装软件:yum install <名称>移除软件:yum remove <名称>安装软件包:rpm -ivh <包全名>安装ifconfig: yum ...

  9. handler内存泄露

    原因: 在Activity中新建一个Handler后,Handler执行计时操作,如果Activity销毁,Handler是不会主动销毁的,而且会占用Activity的空间,不使其回收,积累久了就会内 ...

  10. JMeter中BeanShell实现写入文件

    1.首先F:\test.txt文件为空