C# EF Code First Migrations数据库迁移
1、EF Code First创建数据库
新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。
在程序包管理器控制台中执行以下语句,安装EntityFramework。
PM> Install-Package EntityFramework
安装成功后,界面提示如下图:
在新建的Portal控制台应用程序中添加两个实体类,代码结构如下:
其中,类文件PortalContext.cs的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Data.Entity;
using System.Data.Entity.Infrastructure; using Portal.Entities;
using Portal.Mapping; namespace Portal
{
public class PortalContext : DbContext
{
static PortalContext()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PortalContext>());
} public DbSet<Province> Provinces { get; set; }
public DbSet<Category> Categories { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProvinceMap());
modelBuilder.Configurations.Add(new CategoryMap());
}
}
}

在静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。
代码执行后,生成的数据库:
2、EF Code First数据库迁移
2.1、生成数据库
修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。
static PortalContext()
{
Database.SetInitializer<PortalContext>(null);
}
1>、在程序包管理器控制台,执行语句:
PM> Enable-Migrations -EnableAutomaticMigrations
执行成功后,Portal控制台应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。

namespace Portal.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq; internal sealed class Configuration : DbMigrationsConfiguration<Portal.PortalContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
} protected override void Seed(Portal.PortalContext context)
{
// This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
}
}
}

2>、在程序包管理器控制台,执行语句:
PM> Add-Migration InitialCreate
执行成功后,在Migrations文件夹中新增类文件201309201556388_InitialCreate.cs
3>、在程序包管理器控制台,执行语句:
PM> Update-Database -Verbose
执行结果生成与上面一致的数据库
4>、在数据库模型中添加City类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件201309201643300_AddCity.cs。
PM> Add-Migration AddCity
再次执行程序包管理器控制台语句
PM> Update-Database -Verbose
Portal控制台应用程序的代码结构:
数据库更新成功之后,在数据库中新增表City。
2.2、版本回溯
修改数据库中表City,删除其中字段ProvinceNo。在程序包管理器控制台中执行以下两条语句:
PM> Add-Migration ModifyCity |
PM> Update-Database -Verbose
执行成功之后,City表结构修改为:
执行程序包管理器控制台语句,进行数据库版本回溯。
PM> Update-Database –TargetMigration:"201309201643300_AddCity.cs"
2.3、生成数据库版本之间的Sql脚本
执行程序包管理器控制台语句,生成数据库版本之间的Sql脚本。该操作仅为生成Sql语句,并未在数据库中进行执行。
Update-Database -Script -SourceMigration:"201309201643300_AddCity.cs" -TargetMigration:"201309201708043_ModifyCity.cs"
其中-TargetMigration在未指定的情况,默认为迁移到最新的版本。
3、EF Code First Migrations语句的其他参数
1>、为指定的DbContext启用数据库迁移
PM> Enable-Migrations -ContextTypeName Portal.PortalContext
2>、设置是否允许自动迁移
Enable-Migrations
生成的Configuration.cs类文件的构造函数
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
3>、Enable-Migrations指定项目名称
PM> Enable-Migrations -StartUpProjectName Portal
如果在“Package Manager Console”中选择了默认项目可以不设置“-StartUpProjectName”参数;如果多次执行此命令可以添加-Force参数。
4>、查看所执行的Sql语句 -Verbose指令
Update-Database -Verbose
4、代码下载
5、参考资料
http://msdn.microsoft.com/en-US/data/jj591621
转载地址:http://www.cnblogs.com/libingql/p/3330880.html
C# EF Code First Migrations数据库迁移的更多相关文章
- MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求
MVC5中Model层开发数据注解 ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...
- EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- EF Code First Migrations数据库迁移 (转帖)
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- 【EF】EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- EF Code First 更新数据库, 数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- EFCodeFirst Migrations数据库迁移
EFCodeFirst Migrations数据库迁移 数据库迁移 1.生成数据库 修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置 ...
- EF Code First更新数据库时报错:provider: SQL Network Interfaces, error: 26
在使用EF Code First更新数据库时报如下错误: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Serv ...
- c# EF code First生成数据库以及表
1. 安装Entity Framework 使用NuGet安装Entity Framework程序包:工具->库程序包管理器->程序包管理器控制台,执行以下语句: PM> Insta ...
- Code First Migrations 数据迁移小记
用了codefirst后一个很大的问题就是代码中的属性字段与数据库中表的同步问题,删掉数据库重新生成当然可以解决,不过数据就丢失了(当然通过代码中初始化数据库添加数据也可以解决,初始化的任务可以通过重 ...
随机推荐
- sbt编译spark程序提示value toDF is not a member of Seq()
sbt编译spark程序提示value toDF is not a member of Seq() 前提 使用Scala编写的Spark程序,在sbt编译打包的时候提示value toDF is no ...
- Oracle用户密码过期的处理方法
受影响版本:Oracle11g以上版本. 导致密码消失的原因:Oracle 11g中默认的DEFAULT概要文件中口令有效期PASSWORD_LIFE_TIME默认值为180天. 当以客户端登 ...
- iOS友盟社会化分享U-Share分享面板不显示的问题(基本配置没有错误)
//要先是window可视化 [self.window makeKeyAndVisible]; //添加友盟分享[[UMSocialManager defaultManager] openLog:YE ...
- wpf/wp/win8中的代码编写过程
0.根据需求文档,完成前端界面显示 1.定义事件,初始化事件并定义方法. 2.定义加载数目和当先显示数目,定义方法所需要的变量. 3.编写方法所需要的接口以及接口实现. 4.在方法中引用接口. 5.实 ...
- Deepin Linux已经做得相当不错了
很庆幸,用了MacBook Pro三四年后,还会想要用Linux做桌面,一方面说明自己还是年轻的,保持着愿意折腾的心态:另一方面,也确实发现macOS的桌面环境并不如传说中的稳定和好用. Deepin ...
- sam9260 adc 测试
/* * adc_test.c * * Copyright (C) 2007 Mengrz */ #include <stdio.h> #include <stdlib.h> ...
- windows 中 到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe windows/system32
到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe JavaWindowsCC++C# 当电脑里面有多个jdk或是jre时,在cmd里面到底是用的哪个 ...
- How get a String Width in Libgdx?
http://stackoverflow.com/questions/16600547/how-get-a-string-width-in-libgdx
- 微信小程序——页面之间传递值
小程序页面传值的方式: 1.正向传值:上一页面 --> 下一页面 url传值 本地储存 全局的app对象 2.反向传值:下一页面 --> 上一页面 本地储存 全局的app对象 先说一下 ...
- JSP之静态include指令、动态Include指令
(一)使用静态include指令 <%@ page language="java" contentType="text/html; charset=gb2312&q ...