首页 > 其他 > 详细

EntityFramework4.3.1 Code First 数据迁移

时间:2015-02-03 21:14:23      阅读:385      评论:0      收藏:0      [点我收藏+]

现有数据库生成Code First 代码,先下载 Entity Framework Power Tools
https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d/

如果找不到Nuget就先安装了,在工具-扩展管理器里直接安装。(如下图)

技术分享

需要通过 NuGet 的 Package Manager Console 输入相关命令。

Enable-Migrations -StartUpProjectName 项目名   选择了默认项目可以不设置“-StartUpProjectName。
如报错技术分享,执行:
Install-Package EntityFramework -IncludePrerelease -Version:4.3.1。重装安装,并指定版本号,不然就安装最新版本了。
启动迁移功能。如果已经启用,则提示:
Migrations have already been enabled in project ‘***’. To overwrite the existing migrations configuration, use the -Force parameter。
也可以把【Migrations】目录删除,重新执行。我是用PowerTools反生成的,把【Migrations】删除,再生成就是重复代码了。

下面为数据库添加索引。执行 Add-Migration CreateIndex

技术分享

这时执行 Update-Database –Verbose 就会把修改更新到数据库。

但我想程序运行时自动更新呢?就加这一句了。new MigrateDatabaseToLatestVersion ,如下:

Database.SetInitializer<BalancerSettingContext>(new MigrateDatabaseToLatestVersion<BalancerSettingContext, YS.Balancer.Model.Migrations.Configuration>());

记得要 AutomaticMigrationsEnabled = true;

其实Add-Migration 就在【Migrations】目录添加文件儿而。可以使用【排除项目功能】反复测试。但架构变了就不一样了,因为还有个.Designer.cs的文件的。里面有个三属性。

 技术分享技术分享

如要初始化一些数据就要用到

protected override void Seed(YS.Balancer.Models.BalancerSettingContext context)
{   
            context.bl_Hosts.AddOrUpdate(p=>p.HID,
                new bl_Hosts { IP = "***", UserName = "administrator", Password = “***" },
                new bl_Hosts { IP = "***", UserName = "administrator", Password = "**" }
                );
}

AddOrUpdate,第一个参数的更新的ID 看描述可知。

命令详解:
1. Enable-Migrations
在Package Manager Console中执行Enable-Migrations启动迁移。

执行get-help Enable-Migrations –detailed 查看Enable-Migrations的详细用法。

-ContextTypeName 指定要使用的Context

-EnableAutomaticMigrations 启动自动迁移

-ProjectName 指定搭建的迁移类添加到的项目

-StartUpProjectName 指定使用的配置文件所在的项目

-ConnectionStringName 指定使用配置文件中连接字符串的名称

-ConnectionString 指定使用的连接字符串

-ConnectionProviderName 指定连接字符串的provider名称

-Force 重写迁移配置

2. Add-Migration

在Package Manager Console中执行Add-Migration搭建挂起的Model变化迁移脚本。

执行get-help Add-Migration –detailed查看Add-Migration的详细用法。

-Name 指定自定义脚本的名称

-Force

-ProjectName

-StartUpProjectName

-ConfigurationTypeName 指定使用的迁移配置

-IgnoreChanges 忽略检测到挂起的model改变,创建一个空的迁移。这个选项可用来为已有的数据库启用迁移创建一个初始的,空的迁移。

-ConnectionStringName 指定使用配置文件中连接字符串的名称

-ConnectionString 指定使用的连接字符串

-ConnectionProviderName 指定连接字符串的provider名称

3. Update-Database

在Package Manager Console中执行Update-Database将挂起的迁移更新到数据库。

执行get-help Update-Database -detailed查看Add-Migration的详细用法。

-SourceMigration 只有-Script打开时才有效。指定迁移的名称用作更新的起点。忽略则使用最后一次应用的迁移。

-TargetMigration 指定将数据库更新到哪个迁移的名称。

-Script 生成SQL脚本

-Force

-ProjectName

-StartProjectName

- ConfigurationTypeName

-ConnectionStringName 指定使用配置文件中连接字符串的名称

-ConnectionString 指定使用的连接字符串

-ConnectionProviderName 指定连接字符串的provider名称

迁移到特定版本

上面提到可以使用-TargetMigration开关将数据库迁移到特定的状态。比如,撤销数据库新添加的CreateDate和Unit字段。执行

Update-Database -ProjectName Demo.Domain -TargetMigration:InitialCreate

如果要一直回滚到空数据库,可以使用 Update-Database –TargetMigration:0或-TargetMigration:$InitialDatabase命令。

3.2 生成SQL脚本

生成SQL脚本要使用-Script开关,另外两个比较重要的开关是:-SourceMigration和-TargetMigration。

比如我们要生成InitialCreate到 Add_Product_CreateDateAndUnit的迁移SQL脚本,则执行如下命令:

Update-Database -ProjectName Demo.Domain -Script -SourceMigration:InitialCreate -TargetMigration:Add_Product_CreateDateAndUnit

如果忽略-SourceMigration开关,则使用最后一次应用的迁移作为起点,忽略-TargetMigration,则使用最新迁移作为终点。

使用Migrate.exe迁移

将命令行工具migrate.exe复制到包含迁移配置的程序集位置,可以在VS外部进行迁移操作。

在使用 NuGet 安装实体框架时,migrate.exe 位于下载包的 tools 文件夹中。在 <项目文件夹>\packages\EntityFramework.<版本>\tools 中

有了 migrate.exe 之后,需要将其复制到包含迁移的程序集位置。

如果应用程序面向 .NET 4 而不是 4.5,则还需要将 Redirect.config 复制到这个位置,并将其重命名为 migrate.exe.config。这样,migrate.exe 会让正确的绑定重定向能够找到实体框架程序集。

技术分享技术分享

注意:migrate.exe 目前不支持 x64 程序集。

Migrate.exe的使用

migrate.exe /? 显示帮助信息

migrate assembly [configurationType] [/targetMigration]

[/startUpDirectory] [/startUpConfigurationFile]

[/startUpDataDirectory] [/connectionStringName]

[/connectionString] [/connectionProviderName] [/force] [/verbose]

[/?]

Assembly 指定包含迁移配置类型的程序集

[configurationType] 指定迁移配置类型的名称

[connectionProviderName] 指定连接字符的provider

[connectionString] 指定使用的连接字符串

[connectionStringName] 指定配置文件中使用的连接字符串名称

[force] 表示允许自动迁移引起数据丢失

[startUpConfigurationFile] 指定程序的Web.config或App.config

[startUpDataDirectory] 指定当解析包含|DataDirectory|的连接字符串时使用的目录

[targetMigration] 指定迁移到的版本

[verbose] 指定输出执行的SQL和其他信息到控制台

本Demo中执行

migrate Demo.Domain.dll /startUpConfigurationFile="MigrationsDemo.exe.config" /targetMigration=” Add_Product_CreateDateAndUnit” /verbose

EntityFramework4.3.1 Code First 数据迁移

原文:http://www.cnblogs.com/isnb/p/4270948.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!