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 ...
随机推荐
- xfire webServeic 例子
xfire webServeic 例子,参考网上众多例子,自己写得完成了,给大家分享 大家只要按这个目录去建文件就可以了,然后运行,至于其中原理慢慢理会吧 环境:myeclipse 10 +xfire ...
- webform页面传值和删除修改
一.webform跨页面传值1.内置对象地址栏数据拼接 QueryString 优点:简单好用:速度快:不消耗服务器内存. 缺点:只能传字符串:保密性差(调转页面后在地址栏显示):长度有限.响应请求对 ...
- PHP数组的知识
- 用window.showModelDialog() 打开的页面的返回值
有两个页面也个 Default1.aspx 另外一个是 Default2.aspx Default1.aspx 有个按钮是用来打开Default2.aspx页面的 按钮的js代码是 var win ...
- 学习笔记008之Task
栈 为后进先出 如何实现一个弹出窗体.
- java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.widget.TextView
最近在学习drawerLayout时,遇到这个bug.如下示: java.lang.ClassCastException: android.widget.RelativeLayout cannot b ...
- POJ 3180-The Cow Prom (图论-有向图强联通tarjan算法)
题目大意:有n个牛在一块, m条单项绳子, 有m个链接关系, 问有多少个团体内部任意两头牛可以相互可达 解题思路:有向图强连通分量模版图 代码如下: #include<stdio.h> # ...
- Maven 自动部署
自动部署到Tomcat Maven 3.2.5 JDK 1.7 Tomcat 7 首先在Tomcat里配置deploy的用户(tomcat根目录/conf/tomcat-users.xml): < ...
- Block的copy和循环引用的问题
在实际开发中,发现使用Block有着比delegate和notification更简洁的优势.于是在目前的项目中大量的使用block. 在我的头文件我是这样声明使用block的. 我将block声明为 ...
- 10 个强大的开源 Web 流量分析工具(转帖)
Web 流量分析工具多不胜数,从 WebTrends 这样专业而昂贵的,到 Google Analytics 这样强大而免费的,从需要在服务器端单独部署的,到可以从前端集成的,不一而足.本文收集并介绍 ...