EF Code First Migrations数据库迁移
2016-09-18 14:27
204 查看
1、EF Code First创建数据库
新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。
在程序包管理器控制台中执行以下语句,安装EntityFramework。
PM> Install-Package EntityFramework
安装成功后,界面提示如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/f122461e6212188ed0b3e4d200c68fb8.png)
在新建的Portal控制台应用程序中添加两个实体类,代码结构如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/8dc64e655585c07fadcba499ea186543.png)
其中,类文件PortalContext.cs的代码如下:
在静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。
代码执行后,生成的数据库:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/46b90e9bd6186fbb45b412c751d3ac2e.png)
2、EF Code First数据库迁移
2.1、生成数据库
修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。
1>、在程序包管理器控制台,执行语句:
PM> Enable-Migrations -EnableAutomaticMigrations
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/307c2d59ac77bc3dacee5b520c0a1119.png)
执行成功后,Portal控制台应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/9fb6103094a3097481ab8071bbe793ae.png)
2>、在程序包管理器控制台,执行语句:
PM> Add-Migration InitialCreate
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/c2336c636d419464448cddda0dcd5525.png)
执行成功后,在Migrations文件夹中新增类文件201309201556388_InitialCreate.cs
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/3a8831748205c1fa5b05a7daec60bef2.png)
3>、在程序包管理器控制台,执行语句:
PM> Update-Database -Verbose
执行结果生成与上面一致的数据库
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/7fa967390ba8287fa9c993f6c5a96b66.png)
4>、在数据库模型中添加City类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件201309201643300_AddCity.cs。
PM> Add-Migration AddCity
再次执行程序包管理器控制台语句
PM> Update-Database -Verbose
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/bb3fc4133202ca2da47541f4e5326329.png)
Portal控制台应用程序的代码结构:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/c31580f1cb3b4982791475422407d4d0.png)
数据库更新成功之后,在数据库中新增表City。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/28beae1368ed93508fded22d39d55e06.png)
2.2、版本回溯
修改数据库中表City,删除其中字段ProvinceNo。在程序包管理器控制台中执行以下两条语句:
PM> Add-Migration ModifyCity
PM> Update-Database -Verbose
执行成功之后,City表结构修改为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/933875957e43eb1c80bc7d7312293c10.png)
执行程序包管理器控制台语句,进行数据库版本回溯。
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类文件的构造函数
3>、Enable-Migrations指定项目名称
PM> Enable-Migrations -StartUpProjectName Portal
如果在“Package Manager Console”中选择了默认项目可以不设置“-StartUpProjectName”参数;如果多次执行此命令可以添加-Force参数。
4>、查看所执行的Sql语句 -Verbose指令
Update-Database -Verbose
5、参考资料
http://msdn.microsoft.com/en-US/data/jj591621
新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework。
在程序包管理器控制台中执行以下语句,安装EntityFramework。
PM> Install-Package EntityFramework
安装成功后,界面提示如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/f122461e6212188ed0b3e4d200c68fb8.png)
在新建的Portal控制台应用程序中添加两个实体类,代码结构如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/8dc64e655585c07fadcba499ea186543.png)
其中,类文件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()); } } }
在静态构造函数中,设置了当数据库模型发生改变时,则删除当前数据库,重建新的数据库。
代码执行后,生成的数据库:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/46b90e9bd6186fbb45b412c751d3ac2e.png)
2、EF Code First数据库迁移
2.1、生成数据库
修改类文件PortalContext.cs的静态构造函数,取消当数据库模型发生改变时删除当前数据库重建新数据库的设置。
static PortalContext() { Database.SetInitializer<PortalContext>(null); }
1>、在程序包管理器控制台,执行语句:
PM> Enable-Migrations -EnableAutomaticMigrations
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/307c2d59ac77bc3dacee5b520c0a1119.png)
执行成功后,Portal控制台应用程序代码结构中,添加Migrations文件夹,并生成类文件Configuration.cs。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/9fb6103094a3097481ab8071bbe793ae.png)
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
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/c2336c636d419464448cddda0dcd5525.png)
执行成功后,在Migrations文件夹中新增类文件201309201556388_InitialCreate.cs
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/3a8831748205c1fa5b05a7daec60bef2.png)
3>、在程序包管理器控制台,执行语句:
PM> Update-Database -Verbose
执行结果生成与上面一致的数据库
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/7fa967390ba8287fa9c993f6c5a96b66.png)
4>、在数据库模型中添加City类,执行程序包管理器控制台语句,Migrations文件夹中新增类文件201309201643300_AddCity.cs。
PM> Add-Migration AddCity
再次执行程序包管理器控制台语句
PM> Update-Database -Verbose
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/bb3fc4133202ca2da47541f4e5326329.png)
Portal控制台应用程序的代码结构:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/c31580f1cb3b4982791475422407d4d0.png)
数据库更新成功之后,在数据库中新增表City。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/28beae1368ed93508fded22d39d55e06.png)
2.2、版本回溯
修改数据库中表City,删除其中字段ProvinceNo。在程序包管理器控制台中执行以下两条语句:
PM> Add-Migration ModifyCity
PM> Update-Database -Verbose
执行成功之后,City表结构修改为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/933875957e43eb1c80bc7d7312293c10.png)
执行程序包管理器控制台语句,进行数据库版本回溯。
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
5、参考资料
http://msdn.microsoft.com/en-US/data/jj591621
相关文章推荐
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- 【EF Code First】Migrations数据库迁移
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- C# EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移 (转帖)
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- EF Code First Migrations数据库迁移
- Code First Migrations 迁移更新数据库
- .Net EF Code First 数据库迁移语句
- EF codefirst 数据库迁移