使用migrate.exe执行EF code first 迁移
Code First 迁移可用于从 Visual Studio 内部更新数据库,但也可通过命令行工具 migrate.exe 来执行。本页简单介绍如何使用 migrate.exe 对数据库执行迁移。
复制 migrate.exe
在使用 NuGet 安装实体框架时,migrate.exe 位于下载包的 tools 文件夹中。在 <项目文件夹>\packages\EntityFramework.<版本>\tools 中
有了 migrate.exe 之后,需要将其复制到包含迁移的程序集位置。
如果应用程序面向 .NET 4 而不是 4.5,则还需要将 Redirect.config 复制到这个位置,并将其重命名为 migrate.exe.config。这样,migrate.exe 会让正确的绑定重定向能够找到实体框架程序集。
| .NET 4.5 | .NET 4.0 |
![]() |
![]() |
注意:migrate.exe 目前不支持 x64 程序集。
使用 Migrate.exe
将 migrate.exe 移至正确的文件夹之后,应能够用它对数据库执行迁移。这个实用工具的唯一目的是执行迁移。它不能生成迁移或创建 SQL 脚本。
查看选项
| Migrate.exe /? |
上面显示了与此实用工具关联的帮助页。请注意,要让此选项起作用,在运行 migrate.exe 的同一位置需要有 EntityFramework.dll。
迁移至最新迁移
| Migrate.exe MyMvcApplication.dll /startupConfigurationFile=”..\web.config” |
在运行 migrate.exe 时,唯一的强制参数是程序集,该程序集包含尝试运行的迁移,但如果不指定配置文件,它将使用所有基于约定的设置。
迁移至特定迁移
| Migrate.exe MyApp.exe /startupConfigurationFile=”MyApp.exe.config” /targetMigration=”AddTitle” |
如果需要将迁移运行至特定迁移,可以指定迁移的名称。这将根据需要运行所有以前的迁移,直至到达指定的迁移。
指定工作目录
| Migrate.exe MyApp.exe /startupConfigurationFile=”MyApp.exe.config” /startupDirectory=”c:\MyApp” |
如果程序集有依赖项或相对于工作目录读取文件,则需要设置 startupDirectory。
指定要使用的迁移配置
| Migrate.exe MyAssembly CustomConfig /startupConfigurationFile=”..\web.config” |
如果有多个迁移配置类(从 DbMigrationConfiguration 继承的类),则需要指定要用于此执行的类。可通过指定不带开关的可选第二个参数来进行这种指定,如上所示。
提供连接字符串
| Migrate.exe BlogDemo.dll /connectionString=”Data Source=localhost;Initial Catalog=BlogDemo;Integrated Security=SSPI” /connectionProviderName=”System.Data.SqlClient” |
如果希望在命令行指定连接字符串,还必须指定提供程序名称。不指定提供程序名称会导致异常。
常见问题
| 错误消息 | 解决方案 |
| 未经处理的异常: System.IO.FileLoadException: 未能加载文件或程序集“EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自 HRESULT: 0x80131040) | 这通常表示您正在没有 Redirect.config 文件的情况下运行 .NET 4 应用程序。您需要将 Redirect.config 复制到 migrate.exe 所在的位置,并将其重命名为 migrate.exe.config。 |
|
未经处理的异常: System.IO.FileLoadException: 未能加载文件或程序集“EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自 HRESULT: 0x80131040) ---> System.IO.FileLoadException: 无法加载 文件或程序集“EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自 HRESULT: 0x80131040) |
此异常表示您在将 Redirect.config 复制到 migrate.exe 所在位置的情况下运行 .NET 4.5 应用程序。如果应用程序是 .NET 4.5,则无需内部有重定向的配置文件。删除 migrate.exe.config 文件。 |
| 错误: 无法将数据库更新为与当前模型,因为存在待定更改并且禁用了自动迁移。将待定模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true,启用自动迁移。 | 如果在创建迁移以处理对模型所做的更改之前运行迁移,并且数据库与模型不匹配,会发生此错误。这种错误的一个示例是向模型类添加属性,然后在不创建迁移以升级数据库的情况下运行 migrate.exe。 |
| 错误: 没有为成员“System.Data.Entity.Migrations.Design.ToolingFacade+UpdateRunner,EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”解析类型。 | 此错误可能是因指定不正确的启动目录造成的。此目录必须是 migrate.exe 所在的位置 |
|
未经处理的异常: System.NullReferenceException: 对象引用未设置为某个对象的实例。 在 System.Data.Entity.Migrations.Console.Program.Main(String[] args) 处 |
此错误可能是因没有为要使用的方案指定所需参数引起的。例如,指定了一个连接字符串,但没有指定提供程序名称。 |
| 错误: 在程序集“ClassLibrary1”中找到多个迁移配置类型。请指定要使用的迁移配置类型的名称。 | 正如错误所描述的,给定程序集中有多个配置类。必须使用 /configurationType 开关来指定要使用的配置类。 |
| 错误: 未能加载文件或程序集“<assemblyName>”或它的某一个依赖项。给定程序集名称或基本代码无效。(异常来自 HRESULT: 0x80131047) | 此错误可能是因错误指定程序集名称或没有程序集名称引起的 |
| 错误: 未能加载文件或程序集“<assemblyName>”或它的某一个依赖项。尝试加载格式不正确的程序。 | 如果尝试对 x64 应用程序运行 migrate.exe,会发生这种情况。EF 5.0 及更低版本仅对 x86 有效。 |
使用migrate.exe执行EF code first 迁移的更多相关文章
- EF code first 迁移问题
错误 : 支持"Entities"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlin ...
- EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- EF Code First 更新数据库, 数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- EF Code First 数据迁移配置
这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...
- DDD Code First 迁移数据实现EF CORE的软删除,值对象迁移配置
感谢Jeffcky大佬的博客: EntityFramework Core 2.0全局过滤 (HasQueryFilter) https://www.cnblogs.com/CreateMyself/p ...
- C# 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 ...
- MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求
MVC5中Model层开发数据注解 ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...
随机推荐
- 【转】【C#】ColorMatrix
ColorMatrix(色彩矩阵),是GDI+里用来调整图片色彩的矩阵. 什么是矩阵,说白了就是C#里的二维数组. 那么这个矩阵调整色彩的原理是什么,他是怎么来调整色彩的呢?这个要从线性代数里的矩阵相 ...
- 双绞线线序+POE供电网线
0 重点 一般情况下会用1236(橙白.橙.绿白.绿)传输数据,1.2用于发送,3.6用于接收,45(蓝.蓝白)电源正极 78(棕白.棕)电源负极. 一 网线线序 12发 36收 二 poe网线供电 ...
- php基础27:文件写入
<?php //1.打开一个文件 /* 第一个参数:打开的文件,第二个参数表明模式,w只写 如果打开的文件已经有了,那么删除这个文件,重新创建 如果没有,直接创建 fopen返回的是资源类型re ...
- echo "scale=100; a(1)*4" | bc -l 输出圆周率
突然看到echo "scale=100; a(1)*4" | bc -l可以输出圆周率,很惊奇,后来发现很简单. 首先bc是“basic calculator”的缩写,就是初级的计 ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列03)---- Drawing(绘图)(1)-- 绘写文字
[概览] 本文实现如下的程序:(在窗体中绘画出文字) 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到eric 6, ...
- C#进阶系列——WebApi身份认证解决方案:Basic基础认证 (转)
http://www.cnblogs.com/landeanfen/p/5287064.html 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人 ...
- mysql5.7.12直接解压zip包,安装过程
MySQL-5.7.12-winx64.zip解压安装方式 1.解压文件到你想要安装的位置. 本人是直接解压到E盘. 2.配置环境变量,在path中放入:E:\mysql-5.7.12-win ...
- windows2003 单网卡 搭建vpn ,windows 2008 R2 类似吧。网上转的,自己加了点经验总结
先说说可能的坑,也就是我自己搭建的时候碰到的问题. 其实搭建起来很简单,我不知道我总结的对还是不对,但是按下面这样操作做绝对能搭好!因为我就是按这样搭起来的,但是我发现,好像pptp已经被墙了,我也不 ...
- Ajax基础之封装3
今天接着我们上篇博文的栗子,现在我来扩大一下需求,之前是点击按钮取出新闻,现在要实现每隔一段事件进行新闻的更新.这个时候,肯定是加一个定时器,然后每隔一段事件,再进行一次Ajax请求,既然要经常用到A ...
- 记录我学github的路程(二)
2015-12-09 更新 1,现在,本地有了一个库,你可能会想到GitHub创建一个库,并且关联起来.这样,远程的库既可以当作备份,又可以让其他人通过该仓库来协作. 2,步骤: (1)登录GitHu ...
.png)
.png)