EntityFramework - Code First - 数据迁移
需求
在更新模型之后同步更新数据库里的表,并不丢失原有数据
使用默认值填充新增加的字段
EntityFramework迁移命令
Enable-Migrations 启用迁移
Add-Migration 为挂起的Model变化添加迁移脚本
Update-Database 将挂起的迁移更新到数据库
Get-Migrations 获取已经应用的迁移
DEMO
Model中的原类型
class Student
{
public int ID { get; set; }
public int Name { get; set; }
}
更新后
class Student
{
public int ID { get; set; }
public int Name { get; set; }
public int Age{get;set;}
}
在程序控制台中输入:
PM> Enable-Migrations
// 启用迁移
// 参数:
// -ContextTypeName:项目继承自DBContext的类名字。
// -EnableAutomaticMigrations:开启自动迁移。
// -ProjectName:存放DBContext类的项目名称。
// -StartUpProjectName:解决方案中启动项目的名称,作用是调用该项目下的连接字符串。
// -ConnectionStringName:连接字符串名称
// -ConnectionString: 指定使用的连接字符串
// -ConnectionProviderName: 指定连接字符串的provider名称
// -Force:重写迁移配置 结果:
检测到数据库是由database initializer创建,为现有的数据库搭建初始化迁移脚本
1.在本项目下创建了Migrations文件夹
2.Migrations文件夹下创建Configuration类文件
Configuration类: 此类允许针对上下文配置迁移的行为
3.Migrations文件夹下创建_InitialCreate类文件(若为未生成数据库则无此文件)
InitialCreate类: 此类表示数据库已经创建的对象 可能会出现的错误
1. No context type was found in the assembly 'DEMO'
含义:找不到项目中的继承自DBContext的上下文类
原因:
1.没有上下文类
2.指定了错误的项目
解决方案:
1.添加一个继承自DBContext的上下文类
PM> Add-Migration
// 为挂起的Model变化添加迁移脚本
// 参数:// -Name: 指定脚本名称
// -ProjectName:存放DBContext类的项目名称
// -StartUpProjectName:解决方案中启动项目的名称,作用是调用该项目下的连接字符串。
// -ConfigurationTypeName: 指定使用的迁移配置
// -ConnectionStringName:连接字符串名称
// -ConnectionString: 指定使用的连接字符串
// -ConnectionProviderName: 指定连接字符串的provider名称
// -Force:重写迁移配置
// -IgnoreChanges: 忽略检测挂起的model改变,创建一个空迁移 结果:
1.生成一个自称自DbMigration的类,包含Up()和Down()方法,代表了更新前后两个版本的改动细节
字段的增加 AddColumn()
字段的删除 DropColumn()
可能会出现的错误
PM> Update-Database // 将挂起的迁移更新到数据库
// 参数:
// -SourceMigration: 指定迁移的名称作用更新的起点,默认使用最后一次应用的迁移
// -TargetMigration: 指定将数据库更新到哪个迁移名称
// -Script:生成SQL脚本
// -Force: 重写迁移配置
// -ProjectName:存放DBContext的项目名称
// -StartProjectName: 解决方案中的启动项目名称
// -ConfigurationTypeName: 使用指定的配置
// -ConnectionStringName: 使用指定的连接字符串名称
// -ConnectionString: 使用指定的连接字符串
// -ConnectionProviderName: 指定连接字符串的provider名称 可能会出现的错误
找不到对象“dbo.Quarter”,因为它不存在或者您没有所需的权限。
应用程序启动后自动升级
使用 Enable-Migrations - EnableAutomaticMigrations 打开自动迁移
或者更改迁移配置脚本 Configuration 类构造函数
public Configuration()
{
// 开启自动更新
AutomaticMigrationsEnabled = true;
// 允许在自动更新时丢失数据
AutomaticMigrationDataLossAllowed = true;
}
在上下文类DBContext类中的构造函数
public DEMOContext() : base("name=DEMOContext")
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DEMOContext, Configuration>());
}
EntityFramework - Code First - 数据迁移的更多相关文章
- 图文详解 解决 MVC4 Code First 数据迁移
在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题 这时可以删除数据库重新生成解决 但是之前的数据就无法保留 为了保留之前的数据库数据 我们需要使用到C ...
- 解决 MVC4 Code First 数据迁移 数据库发生更改导致调试失败解决方法(二)
文章转载自:http://www.cnblogs.com/amoniyibeizi/p/4486617.html 前几天学MVC过程中,遇到更改Model类以后,运行程序就会出现数据已更改的问题导致调 ...
- EF Code First 数据迁移配置
这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...
- Code First 数据迁移 转
一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations” 或者 Enable-Migrat ...
- C#+EntityFramework编程方式详细之Code First 数据迁移
在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式, ...
- Code first 数据迁移
前段时间用到了EF,整理一下 EF ,全称Entity FramWork.就是微软以ADO.NET为基础发展的所谓ORM(对象关系映射框架,或者说是数据持久化框架). 简单说就是根据实体对象操作数据库 ...
- EF Code First 数据迁移操作
打开执行命令窗体 1.EF Code First创建数据库 PM> Install-Package EntityFramework 2.EF Code First数据库迁移 2.1.生成数据库 ...
- EF6:编写你自己的code first 数据迁移操作(睡前来一篇,翻译的)
原英文版由EF团队成员 Rowan Miller 在2013年发表,此处只作翻译备忘. 数据迁移提供了一套强类型API,用于执行通用的操作,比如CreateIndex("dbo.Blogs& ...
- EF code First数据迁移学习笔记(转)
转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-pa ...
随机推荐
- 函数参数个数不确定时使用va_start
今天在网上看程序时忽然发现别人的函数参数中有省略号,甚是吃惊,发现其函数中使用了va_start,经过查资料大概明白其用法,个人觉得很好用! #include <stdio.h> #inc ...
- elastic search6.2.2 实现用户搜索记录查询(去重、排序)
elastic search6.2.2 实现搜索记录查询 ,类似新浪微博这种,同样的搜索记录后面时间点的会覆盖前面的(主要思路:关键词去重,然后按时间排序) 先创建索引 //我的搜索 PUT my_s ...
- 单例---被废弃的DCL双重检查加锁
被废弃的单例的DCL双重检查加锁/* *单例模式 *单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点. *加同步锁的单例模式,适合在多线程中使用. */ class Singleton{ ...
- [Java][Web]利用 referer 防盗链
String referer = request.getHeader("referer"); if(referer == null || !referer.startsWith(& ...
- sys模块的问题,深浅COPY的应用场景,元祖与购物车程序练习-打印彩色\033[31;1m--------\033[0m
打印彩色:%s为变量,格式化 print("Added %s into shopping cart,your current balance is \033[31;1m%s\033[0m&q ...
- Go - 指针简介 与 ++/--运算符以及控制语句
指针 Go 语言中,对于指针有一些特殊约束: 1. 不在支持 “->” 符号,所有的指针使用“.” 来操作指针对象的成员变量 2. 指针的默认值为 “nil” ++ 与 -- 作为语句而非表达式 ...
- 第三章 k8s cluster环境创建
1 用如下方法安装指定版本的docker,但是我的环境会报错 # 安装rpm apt install rpm # 下载 RPM 包, docker 版本 wget https://download. ...
- node的express中间件之static之ajax提交json
static中间件可以使客户端直接访问网站中的所有静态文件. 利用这个功能可以直接把服务器上的静态页面直接读取出来返回到客户端. 从客户端点击一个按钮,向服务器端发送数据.并且插入到mysql数据库中 ...
- WindowsPhone自定义控件详解(一) - 控件类库分析
转自:http://blog.csdn.net/mr_raptor/article/details/7251942 为了让你的应用程序更有个性,我们通常会在WP7开发过程中会自定义自己风格的控件,自定 ...
- 05——wepy框架中的一些细节
1.wepy组件的编译 wepy中使用一个组件时候,需要先引用(import).再在需要使用该组件的页面(或组件)中声明.例如: import Counter from '/path/to/Count ...