EF Code First Migration总结
开启Migration
1. 通过 Tools->Nuget Package Manager->Package Manager Console 打开Package Manager Console窗口
2. Default Project选择当前的DbContext所在的项目
3. 通过命令开启Migration
Enable-Migrations
开启之后,DbContext对应的项目中会生成一个Migrations的文件夹, 主要用来存放各个版本自动生成的更新描述文件
类似于下图:

初始化库
通常你新建了模型,在数据库建库之后需要执行一次add-migration命令生成一个库初始化的migration记录
add-migration 20160201003
后面部分的名字我通常都会按照当天日期拼接当天的版本号组成,另外一种不错的实践是按照增加的业务名称命名,英文名称会相对好点.
更新库
库的更新可以分为手动更新跟自动更新, 通常Code First Migration的文章都会讲这里要通过Update-Database命令来把刚才的变更更新到库里面, 通常DEV环境可以这么做,因为是直连的, 但是我们的Staging与Production环境是不可以直连的,我们要怎么做呢?
前面有提到可以自动更新,其意思就是说,你通过 add-migration生成了migration脚本,那当程序启动的时候,如果发现数库接口不一致,那这个就需要更新,这个时候如果是自动更新的状态,那程序会自动执行(从意思上等同于update-database, 产生的效果相同,但是并未实际考证是否也是跑的update-database命令), 因此无论是dev环境还是staging, production都可以通过自动update-database来完成数据库的更新。
如何设置自动更新
这里有两步:
1. 在migrations文件夹下有个configuration的文件, 代码如下:
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
}
AutomaticMigrationsEnable = true 之后, 设置EF为自动做数据库更新。
2. 在Global.cs或者任何程序启动的地方加入:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<CustomerDbContext, Configuration>());
这句是设定当前DbContext的一个初始化配置.
潜在的问题
自动迁移,在某些该名称,或者删除字段的时候,会造成现有数据的丢失,这个需要注意,目前我也是在探索过程中,有进一步的研究成果,会在更新博文说明。
【补充部分】
初始化脚本的更新
public partial class InitDefaultData : DbMigration
{
public override void Up()
{
Sql(@"
--初始化FileType原始数据
insert into FileType (SysId,FileTypeId,FileTypeName,Status,CreationTime) select NEWID(),10001,'客户资料',0,GETDATE();
insert into FileType (SysId,FileTypeId,FileTypeName,Status,CreationTime) select NEWID(),10002,'订单资料',0,GETDATE();
insert into FileType (SysId,FileTypeId,FileTypeName,Status,CreationTime) select NEWID(),10003,'车辆资料',0,GETDATE(); --初始化FileCategory原始数据
insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),1,'图片',0,GETDATE();
insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),2,'复印件',0,GETDATE();
insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),3,'视频',0,GETDATE();
insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),4,'Excel文件',0,GETDATE();
insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),5,'Word文件',0,GETDATE();
");
} public override void Down()
{
Sql(@"truncate table FileType");
Sql(@"truncate table FileCategory");
}
}
可以通过Sql函数来执行一些自定义的SQL脚本。
EF Code First Migration总结的更多相关文章
- Some lines about EF Code First migration.
Some lines about EF Code First migration: 一. 模型设计 1. 遵循EF标准,注意表关系配对 2. 数据模型里尽量把必须的属性和说明都写全 3. EF默认id ...
- EF Code First学习系列
EF Model First在实际工作中基本用不到,前段时间学了一下,大概的了解一下.现在开始学习Code First这种方式.这也是在实际工作中用到最多的方式. 下面先给出一些目录: 1.什么是Co ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- 1.什么是Code First(EF Code First 系列)
EF4.1中开始支持Code First .这种方式在领域设计模式中非常有用.使用Code First模式,你可以专注于领域设计,根据需要,为你一个领域的对象创建类集合,而不是首先来设计数据库,然后来 ...
- IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)
转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html 有修改 Autofac通过Controller默认构造 ...
- EF Code First 数据迁移配置
这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...
- Sqlite && EF Code FIRST 终极解决方案 2019.5.17
Sqlite && EF Code FIRST 终极解决方案 2019.5.17 包括根据模型自动生成数据库,初始化数据,模型改变时的自动数据迁移等 2019.12.25 更新 支持E ...
- 【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 、配置swagger (三)
系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...
- EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
随机推荐
- SQL Server SELECT逻辑处理顺序
SQL Server SELECT语句,逻辑处理顺序,虽然SELECT位于语句最前面,它在逻辑处理中,基本上是最后一个被执行的部分. 下面列出查询子句在逻辑上处理顺序: 1. FROM 2. WH ...
- 遇到一个奇葩的问题,could not load the assembly file XXX downloaded from the Web
在我这编译好好滴,发给客户那边居然不通过,报could not load the assembly file:///xxx.dll, 查阅了一些文档后,发现原来是文件的安全问题,是由于我把文件压缩打包 ...
- SSH基本框架搭建后的简化
对于SSh框架的简化,我们可以从下面几个方面来剖析: 1.实体类entity:在这里我们需要将数据库和实体类进行关联,在简化之前,我们需要在entity包里面加入一份.xml配置文件 例如原码---- ...
- ( 解压缩版 免安装版 或 zip版 )如何修改mysql5.6.24 字符编码
1.当我们把zip文件格式解压到指定目录后,并且完成基本环境配置后,打开mysql 5.6.24会发现名为[my-default.ini]的文件.我们用记事本打开该文件会发现并没有[default-c ...
- delphi之多线程编程
本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以 ...
- 安卓手机开机开启指定Activity
1.布局 默认helloworld布局 2.class BootCompleteReceiver package lpc.com.project522; import android.content. ...
- Spring MVC开发环境的搭建和实例
一.安装jdk 二.安装tomcat 三.安装maven 新增环境变量MAVEN-HOME,并在path变量中添加bin路径 四.安装IntelliJ IDEA 五.创建maven web项目选择jd ...
- Filter过滤器简单应用( 接口访问控制 )
一.描述 在提供安卓.IOS客户端接口时,可以在登陆接口分配Session给客户端,用于判断其他接口是否是合法访问,以避免将所有的接口都暴露在web中可以由路径直接访问.但是最近的一个项目中的移动接口 ...
- as 和 is 区别
as 将对象转换某类型,如果失败则返回null.is用来判断对象是否为某个类型,在判断过程中会对对象进行两次转换,而as只有一次转换,故as效率高.
- MySQL下划线特殊字符(Like 语句)
最近用了MySQL+ibatis 做项目 问题描述: 在SQL里 用到了 a.name like ##%searchName%## searchName=test_1 发现出来的结果: test_1, ...