EntityFramework Code First便捷工具——数据迁移
使用EntityFramework Code First开发,数据迁移是一个不得不提的技术。
在我们的开发过程中,难免需要对模型进行改进,模型改进后,会导致实体集与数据库不一致,当然我们可以通过删除数据库然后再重构数据库,但是在生产环境中这样做,这样或多或少会出现一些问题。使用“数据迁移”,可以帮助我们解决这个问题。
数据迁移,添加的是我们对数据库的改动,这一点可以从下面Demo中可以看出来。每对数据库进行一次改动(如删除了某个表,更改了某一列),添加一次数据迁移,然后更新数据库,这样就能够达到我们的目的。
先说一下我用的工具:
Vs2015 pro
Sql Serer 2014 developer
现在微软的开发工具开发者版都免费了,个人用户的话用起来还是会比较舒服的。
接下来放上一个小的Demo
新建一个空白解决方案(文件-新建-项目-其他项目类型-空白解决方案)Demo

然后添加两个类库,分别命名为Demo.Model和Demo.DAL。
添加一个Web应用程序(MVC),命名为Demo.UI
分别为Demo.Model、Demo.UI、Demo.DAL安装EntitFramework。
程序包管理控制台输入
Install-Package EntityFramwork
在Demo.Model中添加一个User类
namespace Demo.Model
{
public class User
{
public int UserId { get; set; }
public string UseraName { get; set; }
public string Password{ get; set; }
}
}
在Demo.DAL中添加一个DemoDbContext类,该类继承自DbContext类,作用主要是对数据库结构的映射(个人理解)。

using Demo.Model;
using System.Data.Entity;
namespace Demo.DAL
{
public class DemoDbContext:DbContext
{
public DemoDbContext() : base("Name=DefaultConnection")
{
}
//添加User表
public IDbSet<User> Users { get; set; }
}
}
开启数据迁移
在程序包管理控制台输入(不区分大小写):
Enable-Migrations

执行完可以发现,这里新建了一个名为 Migration 的文件夹和一个配置文件
然后进行下一步操作,设置 Demo.UI 为启动项目

然后修改Web.config中的ConnectionString属性
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=.;User Id=sa;Password=123; Database=DemoDbContext" providerName="System.Data.SqlClient" />
</connectionStrings>
这里定义的是连接字符串,不同的 Sql 版本对应的连接字符串可能会不一致,Sql Server Express 版本默认的实例名为 SQLEXPRESS 所以连接字符串应为
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=./sqlexpress;User Id=sa;Password=123; Database=DemoDbContext" providerName="System.Data.SqlClient" />
</connectionStrings>
这里注意一下 Database 属性,这里定义的为数据库的名称,这里要与前面定义的 DemoDbContext 保持一致。
配置好以后,在程序包管理控制台窗口输入
Add-Migration Add_User_Entity
这样我们就添加了一次数据迁移,数据迁移的名称为 Add_User_Entity

执行完之后会发现,Migration 文件夹添加了一个配置文件 201709250342176_Add_User_Entity.cs 前面是时间,后面是我们数据迁移的名字。

添加测试数据
在 Demo.DAL 中 Migration 文件夹中添加一个名为 Seed 的文件夹
添加一个 UserSeed 类
using Demo.Model;
namespace Demo.DAL.Migrations.Seed
{
public class UserSeed
{
public readonly DemoDbContext _dbcontext;
public UserSeed(DemoDbContext context)
{
_dbcontext = context;
}
public void Create()
{
AddSeed();
}
public void AddSeed()
{
User User = new User
{
Password = "123",
UseraName = "Niko"
};
_dbcontext.Users.Add(User);
_dbcontext.SaveChanges();
}
}
}
在 Migration 文件夹 Configuration.cs 中添加
protected override void Seed(Demo.DAL.DemoDbContext context)
{
//添加种子数据
new UserSeed(context).Create();
}
添加完以后,执行最后一步 —— 更新数据库
在程序包管理控制台输入
Update-Database
或者
Update-Database -Verbose
后者会在控制台输出对数据库的操作过程,这样我们在数据库中就建立了一个名为 DemoDbContext 的数据库,并在里面添加了一个 Users 表,并添加了我们想要的测试数据:

以后每对数据库进行一次改动,就添加一次数据迁移,然后更新数据库,即可实现我们的目的。
EntityFramework Code First便捷工具——数据迁移的更多相关文章
- Entity Framework Code First Migrations--EF 的数据迁移
1. 为了演示方便,首先新建一个控制台项目,然后添加对entityframework的引用 使用nuget控制台执行: Install-Package EntityFramework 2.新建一个实体 ...
- Entityframework Code First 系列之数据注释
上一篇<Entityframework Code First 系列之项目搭建>讲了搭建一个Code First的控制台项目.里面有一些内容并没有扩展出来讲,因为篇幅有限.这篇针对上面内容中 ...
- EF 中 Code First 的数据迁移以及创建视图
写在前面: EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别.Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功 ...
- C#+EntityFramework编程方式详细之Code First 数据迁移
在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式, ...
- EntityFramework Code First 模式下使用数据迁移
启用数据迁移 在程序包管理控制台选择安装了EntityFramework的项目,键入如下指令以启EF用数迁移. Enable-Migrations 命令成功运行后,所选项目下会添加名为Migratio ...
- 图文详解 解决 MVC4 Code First 数据迁移
在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题 这时可以删除数据库重新生成解决 但是之前的数据就无法保留 为了保留之前的数据库数据 我们需要使用到C ...
- Entity Framework应用:Code First模式数据迁移的基本用法
使用Entity Framework的Code First模式在进行数据迁移的时候会遇到一些问题,熟记一些常用的命令很重要,下面整理出了数据迁移时常用的一些命令. 一.模型设计 EF默认使用id字段作 ...
- 解决 MVC4 Code First 数据迁移 数据库发生更改导致调试失败解决方法(二)
文章转载自:http://www.cnblogs.com/amoniyibeizi/p/4486617.html 前几天学MVC过程中,遇到更改Model类以后,运行程序就会出现数据已更改的问题导致调 ...
- Entity Framework 学习系列(3) - MySql Code First 开发方式+数据迁移
目录 # 写在前面 一.开发环境 二.创建项目 三.安装程序包 四.创建模型 五.连接字符串 六.编辑程序 七.数据迁移 写在最后 # 写在前面 这几天,一直都在学习Entity Framework ...
随机推荐
- 每天一道剑指offer-二叉树的下一个结点1
题目 每天一道剑指offer-二叉树的下一个结点https://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a?tpId=13&a ...
- .net mvc Razor 三元运算判断赋值 ?:
预期效果: 当Model中的Age数字列值为0时,不显示该值. <input type="text" class="form-control onlyPositiv ...
- Ionic3 UI组件之 PhotoViewer
PhotoViewer是常用的Cordova Plugin之一,用来显示图片. 组件特性: 根据Url显示图片 支持手势,可放大缩小 带分享按钮,可分享图片 带关闭按钮 加载错误时自动关闭组件 支持B ...
- c#基础学习(0724)之可变参数、ref和out
params可变参数,无论有几个参数,必须出现在参数列表的最后,可以为可变参数直接传递一个对应类型的数组 #region 可变参数 //1.如果方法有多个参数,可变参数可以作为最后一个参数 //2.可 ...
- 关于发布程序之后js文件存在缓存问题
把js文件加上版本号即可解决 如: <script src="../Static/js/Contract/ContractRateEdit.js?t=20181210"> ...
- C#在.NET编译执行过程
1..NET语言的编译器接受源代码文件,并生成名为程序集的输出文件. 程序集要么是可执行的,要么是DLL 程序集里的代码并不是本机代码,而是一种名称为CIL的中间语言 程序集包含如下信息: 程序的CI ...
- springcloud-feign的hystrix支持
关于hystrix的介绍,可以看我的上篇博客:springcloud-断路器hystrixs 本文主要介绍在feign中,如何使用hystrix 1.pom依赖 <dependency> ...
- 表示层设计模式:Intercepting Filter(截取筛选器)模式
上下文 问题 影响因素 解决方案 变体 示例 结果上下文 相关模式 致谢 上下文 对于任何一个曾经从头建立 Web 应用程序的人来说,他们都会有这样的体会:这项任务所需要的独立完成 ...
- 斐波那契堆(Fibonacci heap)原理详解(附java代码实现)
前言 斐波那契堆(Fibonacci heap)是计算机科学中最小堆有序树的集合.它和二项式堆有类似的性质,但比二项式堆有更好的均摊时间.堆的名字来源于斐波那契数,它常用于分析运行时间. 堆结构介绍 ...
- Qt架构图及模块分析介绍
1.Qt框架图: 2.Qt模块组成 通用软件开发模块 QtCore 核心非图形接口类,为其他模块所调用 QtGui GUI(图形用户接口)功能模块 QtMultimedia 提供低级多媒体功能支持的类 ...