EntityFramework进阶——CodeFirst数据库迁移

与视觉操作界面相比,CodeFirst机制提供了一套命令行模式的迁移工具,协助开发人员有效的进行数据库与数据模型的同步维护操作。

新建一个控制台项目CFMigrationsDemo,选用来自数据库的EF设计器模式, 并向其中添加一个Product.cs类文件,如下图所示:

public class Product
{public int Id { get; set; }public string Name { get; set; }
}

 

Enable-Migrations :启动此项目的迁移功能

在程序包管理器中控制台输入上述命令,可以看到已经启用CodeFirst项目迁移功能,如下图所示:


 

 Add-Migration MigName:建立迁移文件,Add-Migration 和 MigName中间空一格,MigName为自定义名称,表示要创建的迁移文件名称,建议以有意义的名字来命名。

在程序包管理器控制台输入 Add-Migration AddProduct 以建立迁移文件,如下图所示:

生成的迁移文件如下图所示:

                                  

打开迁移文件可以看到如下代码:

    public partial class AddProduct : DbMigration{public override void Up(){CreateTable("dbo.Products",c => new{Id = c.Int(nullable: false, identity: true),Name = c.String(),}).PrimaryKey(t => t.Id);}public override void Down(){DropTable("dbo.Products");}}

 这是一个继承DbMigration的类文件,CodeFirst迁移通过自动生成的Up和Down方法记录每一次的变动内容,以支持数据库的升级和降级。通过调用Down方法可以将数据库恢复至此次迁移前的状态。

 


Update-Database:更新数据库

接下来完成第一次迁移操作,在程序包管理器控制平台输入上述命令:

                 

可以看到迁移已经顺利完成,在原来的数据库中添加了一个Product表:

                                        

 


结构变动迁移 

在Product.cs类中,添加一个字段Price:

    public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }}

重新打开程序包管理控制台对话框,在其中键入Add-Migration AddProductPrice添加一个迁移文件,再执行一次Update-Database指令,界面如下图所示:

 数据库已经生成Price字段属性:

                                          

 


查看SQL 

Update-Database —Verbose: 每一次迁移是通过SQL语句来完成数据库更新操作的,如果想要查看所使用的的SQL语句,可以加上-Verbose标志。

在Prodcut.cs类文件上增加属性Quantity以创建可以存储商品数量的字段:

    public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }public int Quantity { get; set; }}

首先执行Add-Migration AddProductQuantity命令添加迁移文件,在执行一次Update Database-Verbose命令,这个过程除了完成迁移操作外,同时会显示执行迁移的SQL语句,如下图所示:


指定迁移 

Update-Database -TargetMigration:MigrationName:Update-Database 和 -TargetMigration之间有空格。在执行Update—Database命令时,可以进一步指定所要迁移的版本,现在执行Update-Database -TargetMigration:AddProductQuantity,这是当前最新的版本,因此不会起作用。再执行前一个版本的迁移,执行Update-Database-TargetMigration:AddProductPrice命令,会导致降级。

                 

上述过程会导致降级,执行AddProductQuantity中的Down方法删除Quantity字段,恢复到AddProduct的状态。 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端控件JQuery Datatables使用——常用功能初始化

本文用于自己记录,忘记时可以用来回顾。点击这里进入JQuerydatatable官网API地址 JQuery Datatables初始化 个人比较喜欢JQueryDatatables的Bootstrap4风格,所以文章以Bootstrap4风格为例。 JQueryDatatable的初始化很简单,按照官网的举例说…

一款轻量级的消息提示插件 —— toastr

toastr是一款轻量级的消息提示插件,基于JQuery,使用简单方便,外观大气漂亮。 点击这里进入toastr在线调试使用 点击这里进入toastr官方网站 使用效果如下图所示: 插件使用需要引用的JS和CSS文件如下图所示: 各版…

《Spring Recipes》第二章笔记:Creating Beans by Invokin...

2019独角兽企业重金招聘Python工程师标准>>> 《Spring Recipes》第二章笔记:Creating Beans by Invoking an Instance Factory Method 问题 用户希望使用工厂类来实例化bean。 解决方案 Spring的bean元素中提供了factory-bean属性来配置工厂类&#xff0…

JQuery Datatables editor进行增删改查操作(一)

背景 editor作为Datatables的插件之一,功能十分强大,有全行编辑模式、泡泡编辑模式、行内编辑模式。个人觉得,除了泡泡编辑模式外,其他两种模式功能在实际项目中会经常使用到,泡泡模式提供了模态框可以对表格内的数据…

将C#中DateTime类型转化为JavaScript中的Date类型

将C#中的DateTime类型数据返回到前端页面时,显示的样子如下图所示: 可以用JS前端操作转化成JS的Date格式,直接上代码 : // 对Date的扩展,将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季…

FusionCharts V3图表导出图片和PDF属性说明

百闻不如一见,狠狠点击,快快下载:(演示文档有错误,不提供下载了。待新的演示文档出来。) 许多朋友说上面的DEMO用不了。fusioncharts官方的演示非常不错,就是来不及整理,各位大侠们…

JQuery Datatables editor进行增删改查操作(二)

背景 上一篇对editor进行了一个基本功能的初始化操作演示,本文进一步了解下editor在上一篇文章功能的基础上添加了部分常用基本功能。 整体界面如下图所示: 新增界面: 新增界面增加了单选按钮,下拉框,和时间选择器&am…

《统一沟通-微软-实战》-6-部署-2-中介服务器-5-语音路由-语音策略

创建语音策略和配置 PSTN 用法记录 如果要创建新的语音策略,请执行以下步骤。如果要编辑语音策略,请参阅修改语音策略和配置 PSTN 用法记录中的相关步骤。 注意: 每个语音策略必须至少具有一条关联的 PSTN 用法记录。要查看企业语音部署中提…

JQuery Datatables editor 行内编辑功能

背景 ERP软件中,能进行行内编辑的表单是常用功能,行内编辑功能能让用户在表格中自己填写、修改、删除数据或者选择数据,可以说表格控件是ERP软件的核心控件,而行内编辑功能是核心中的关键。 本文会继续接着上一篇文章的介绍继续…

Shell图形化监控网络流量

shell图形化监控网络流量 网络流量的监控工具有很多,如:Mrtg、Cacti、Zabbix等等,他们都有着各自的特点,不同的侧重,只为适合不同的应用场景的各种特殊需求。除了网络流量监控工具以外,还有Nagios这样的监控…

JQuery Datatables editor 在编辑前刷新数据

背景 在同一时间,可能很多人在编辑修改同一数据,这会导致在一个人还在在修改的过程中另一人在完成了修改并保存了数据。editor在button插件的扩展中可以有效的缓解这个问题:自定义一个编辑按钮,此编辑按钮实现 点击按钮后&#x…

JQuery Datatables 显示行的附加信息

点击这里查看datatables官网介绍 点击这里查看datatables中文网介绍 效果如下图所示: 点击首列调用ajax返回数据,并展开明细行如下图所示: CSS代码: td.details-control {background: url(../../scripts/datatables-1.10.19/ima…

初涉c#设计模式-Iterator Pattern

一、迭代器模式简介(Brief Introduction) 迭代器模式(Iterator Pattern),提供一种方法顺序访问一个聚合对象中元素,而不暴露改集合对象的内部表示。 Provide a way to access the elements of an aggregate object sequentially without exposing its un…

Buttons——CSS按钮样式库

点击进入查看官网说明 不同颜色按钮&#xff1a; <button class"button button-3d button-primary">button1</button><button class"button button-3d button-action">button2</button><button class"button button-3d b…

Win10中如何找到并打开SqlServer2008 R2配置管理器

首先Win R &#xff0c;打开运行窗口&#xff0c;然后输入&#xff1a; SQLServerManager10.msc

机器学习中的相似性度量

在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement)&#xff0c;这时通常采用的方法就是计算样本间的“距离”(Distance)。采用什么样的方法计算距离是很讲究&#xff0c;甚至关系到分类的正确与否。 本文的目的就是对常用的相似性度量作一个总结。 本文…

EF中DB First模式下数据库中表结构变化时如何快速同步到EF模型中

没想到什么好的精准的办法&#xff0c;持续的报错&#xff0c;然后定位报错很是头疼。我目前感觉较快方式有两种&#xff0c;如果有更好的方式&#xff0c;请大家指教。 一、先在数据库中修改表的结构属性&#xff0c;再删除edmx文件中对应的实体类模型&#xff0c;然后再是“从…

HTML5 FileReader API 测试(一)

2019独角兽企业重金招聘Python工程师标准>>> 参考文章 html5之FileReader接口 http://zhangyaochun.iteye.com/blog/1487900 1、FileReader接口的作用&#xff1a; 用来把文件读入内存&#xff0c;并且读取文件中的数据。 2、支持情况 FF3.6| Chrome6 Js代码 /*…

Bootstrap模态框居中显示

Bootstrap默认的模态框不是居中显示的&#xff0c;需要稍微修改下源代码&#xff1a; 1、打开源码bootstrap.js&#xff0c;在里面找到如下代码&#xff1a; 2、在上述代码段落下面增加居中的代码即可&#xff1a; //使弹出框居中。。。var $modal_dialog $(this.$element[0]…

Bootstrap模态框显示时有阴影遮罩层

如下图所示&#xff1a; 有遮罩层在&#xff0c;无法进行任何操作&#xff0c;只需修改默认 z-index 属性即可&#xff1a; .modal-backdrop{z-index:0;}