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 迁移的更多相关文章

  1. EF code first 迁移问题

    错误 : 支持"Entities"上下文的模型已在数据库创建后发生更改.请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlin ...

  2. EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  3. EF Code First 更新数据库, 数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  4. EF Code First 数据迁移配置

    这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...

  5. DDD Code First 迁移数据实现EF CORE的软删除,值对象迁移配置

    感谢Jeffcky大佬的博客: EntityFramework Core 2.0全局过滤 (HasQueryFilter) https://www.cnblogs.com/CreateMyself/p ...

  6. C# EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  7. EF Code First Migrations数据库迁移 (转帖)

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  8. 【EF】EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  9. MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

    MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...

随机推荐

  1. Contains Duplicate

    Given an array of integers, find if the array contains any duplicates. Your function should return t ...

  2. ARM基础知识

    ARM处理器模式: 模式可以理解为 工作环境. 异常模式:SVC管理模式. FIQ 快速中断模式 . IRQ中断模式.Abort中止.Undef 未定义模式: 正常模式:System系统模式. Use ...

  3. ubuntu上怎么设置默认python命令是执行python3而不是python2

    来源:https://segmentfault.com/q/1010000003713912 alternatives这么好的机制用起来呀. shell里执行: sudo update-alterna ...

  4. chrome http Request Header 修改插件

    chrome http Request Header 修改插件 2013-05-31 11:03:03|  分类: JavaScript |  标签:chrome  extensions  chang ...

  5. LeetCode 笔记21 生成第k个排列

    题目是这样的: The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all ...

  6. google map api v2的使用详细过程,图文并茂(原创)

    上一篇中说到怎么获取key,下面来介绍怎么使用key来显示google地图 步骤1:eclipse上打开android SDK Manager,安装google play services. 步骤2: ...

  7. 学习笔记——Maven 内置变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

  8. valueOf和toString

    有一道经典的题目: var add = function() {___}; console.log(add(3)(4)(5)); // 输出60 题目要求能无限相乘,请补充add函数. 首先很显然,a ...

  9. C#基础知识系列六(静态类和静态类成员)

    静态类 静态类与非静态类基本相同,但存在一个区别:静态类不能实例化. 也就是说,不能使用 new 关键字创建静态类类型的变量. 因为没有实例变量,所以要使用类名本身访问静态类的成员. 例如,如果名为 ...

  10. 网站开发技巧, 使用byte[]持久化用户个性设置

    场景, 网站用户的个性化配置较多, 而且容易发生增加和改变, 如何在数据库保存是个问题. 为了避免数据库表字段经常变更, 我们设计在表增加一个varbinary(max)字段存储个性化配置. 个性化的 ...