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. flex 3 rows layout

    html,body{height:100%} .wraper{ display:flex; flex-direction:column; height:100%; flex-wrap: nowrap; ...

  2. U3D5.3.5f Monodevelop 仅支持到.NET 3.5

    2016年12月2号:发现这个标题是错误的,可以在monodevelop中选择.NET的版本,如下:打开solution,右击 Assembly-CSharp,options, build, gene ...

  3. Jquery 将表单序列化为Json对象

    大家知道Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法.不过,我们可以写一个插件实现. 我在网上看到有人用替换的方法,先用 ...

  4. MVC3学习:利用mvc3+ajax实现登录

    用到的工具或技术:vs2010,EF code first,JQuery ajax,mvc3. 第一步:准备数据库. 利用EF code first,先写实体类,然后根据实体类自动创建数据库:或者先创 ...

  5. html:关于表单功能的学习

    比如我在某jsp页面中写了如下表单: <form action="/MavenWeb/TestFormPost" method="get">   & ...

  6. Activiti6.0 安装出错 log4j:ERROR setFile(null,true) call failed.

    由于要选择一款合适的流程引擎,需要在jbpm和Activiti之间做对比,我这边负责Activiti的测试. 看到Activiti官网(http://www.activiti.org/download ...

  7. IOS开发之—— UITextView禁止Emoji输入

    UITextView代理方法:判断 -(void)textViewDidEndEditing:(UITextView *)textView{        if ([self stringContai ...

  8. iOS开发之—— XCODE真机调试设备连接一直忙碌如何处理!(真机调试各种错误提示解决)

    真机调试,想连接真机调试代码可是连上设备后就一直转圈, 在Divice里面一直提示“iphone名称” is busy: Processing symbol files Xcode will cont ...

  9. Asp.Net MVC 合并js或css请求

    Step1:BundleConfig中注册 bundles.Add(new ScriptBundle("~/isValid").Include(  "~/Scripts/ ...

  10. Html中metra的含义

    from: http://dev.csdn.net/article/60/60902.shtm meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head&g ...