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 有效。
 

最新文章

  1. mb_系列函数和普通字符函数的区别
  2. 【洛谷P1196】银河英雄传说
  3. js每天进步一点点3
  4. MyBatis&lt;forEach/&gt;如何遍历Map参数里的值
  5. LOL(英雄联盟)系统鼠标速度锁定工具
  6. Linux使用fdisk进行磁盘管理
  7. [jQuery] $.grep使用
  8. ASP.NET -- repeater控件的使用
  9. iOS 之 UICollectionView
  10. Angular JS中的路由
  11. 使用foreach需要判空。
  12. lambda 委托 匿名方法
  13. Sitecore标准模板字段
  14. jq 全选与联动的小例子
  15. linux命令行总结给自己看的版本
  16. minicom的安装及配置
  17. OpenCV——Harr特征
  18. SweetAlert插件 弹框插件
  19. 复制web项目,启动的时候的工程名如何改变
  20. Getting Started with Amazon EC2 (1 year free AWS VPS web hosting)

热门文章

  1. Maximal Square
  2. 20145208 实验三 Java面向对象程序设计
  3. 【Win 10应用开发】如何知道当前APP在哪个平台设备上运行
  4. CocoaPods Podfile 文件写法有讲究
  5. Git.Framework 框架随手记--ORM条件组合
  6. Object C学习笔记13-Dictionary字典
  7. js回调
  8. 小记:Quartz StartNow() 无效
  9. 使用background和background-image对CSS优先级造成影响
  10. struts2面试题汇总