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. 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

    目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...

  2. 后盾网VIP美团网开发(基于HDPHP)(全套38课)

    教程简介 本教程由后盾网讲解,共40节,主要介绍了美团网的开发,从需求分析出发,对商铺的建立.购物流程的构建及订单处理等都做了详细的介绍,非常适合做电子商务开发的朋友和同学参考学习使用,完整教程可以在 ...

  3. Matlab的title如何实现换行显示?

    怎么才能在'B Range'前面开始换行呢? title(['abc','L Range:',num2str(a),'(nm)','~~',num2str(b),'(cm)','B Range:',n ...

  4. [CareerCup] 2.3 Delete Node in a Linked List 删除链表的节点

    2.3 Implement an algorithm to delete a node in the middle of a singly linked list, given only access ...

  5. Linux第五次学习笔记

    处理器体系结构 Y86指令集体系结构 定义一个指令集体系结构 ,包括定义各种状态元素.指令集和它们的编码.一组编程规范和异常事件处理. 程序员可见的状态 Y86程序中的每条指令都会读取或修改处理器状态 ...

  6. 通俗易懂------this指向

    因为JavaScript 中this 是在运行期进行绑定的,因此JavaScript 中this 关键字具备多重含义. 具体在实际应用中,this的指向大致可以分为下面4种. 作为对象的方法调用   ...

  7. C#基础之yield与Singleton

    1.实例解析yiled的作用 最近参加java笔试题第一次见到yield这个关键字,既然遇见了那肯定要掌握,下面是C#中关于yield关键字的总结.yield这个关键字作用于迭代器块中,其最本质的功能 ...

  8. Github个人使用经历

    Github是什么? 简单来说Git是一个分布式的版本控制系统.GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,Git ...

  9. 移动APP为什么要开发两套Android和IOS-桥接模式

    一.前言 现在用H5开发个 web app 多么方便,兼容两大系统Andriod和IOS.但是为什么许多公司还要开发原生的APP?开发原生的APP就需要开发两套一套运行在Andriod系统的,一套运行 ...

  10. jQuery问题:$XXX is not a function

    用火狐浏览器打开,js代码一段不执行,F12以后看见下面的错误: 网上查看说是jQuery文件引用的问题,把jQuery.js引入语句修改了一下,果然没有错了. 我原来的引用语句是:<scrip ...