将Entity Framework migrate.exe与多个迁移配置一起使用时出现ConfigurationType



在我的解决方案中,我有一个包含多个Entity Framework 6.1.3迁移配置类的Data项目。我的目标是从TeamCity(或者,为了简化,从命令行)运行实体框架迁移步骤,其中一个步骤是针对现有数据库。

我使用的迁移配置类如下:

namespace MyProject.Data
{
    public partial class MyCustomMigrationConfiguration :
        DbMigrationsConfiguration<MyCustomContext>
    {
        public MyCustomMigrationConfiguration()
        {
            AutomaticMigrationsEnabled = false;
            AutomaticMigrationDataLossAllowed = true;
            MigrationsDirectory = @"MigrationsMyCustomContextMigrationSteps";
        }
    }
}

我可以从Visual Studio中的包管理器控制台成功运行以下命令:

更新数据库-Verbose-StartUpProject Web-ConnectionString'-my此处的连接字符串-'-ConfigurationTypeNameMyCustomMigrationConfiguration-ConnectionProviderName"System.Data.SqlClient"

我想从命令行做同样的事情,所以我运行这个:

migrate.exe MyProject.Data.dll"MyCustomMigrationConfiguration"/startUpConfigurationFile=MyProject.Web.dll.config/connectionString="-此处为我的连接字符串-;"/connectionProviderName="System.Data.SqlClient"/verbose

然而,我得到以下错误:

错误:迁移配置类型在程序集中找不到MyCustomMigrationConfiguration"MyProject.Data".

关于如何解决这个问题,有什么建议吗?

您可以指定运行代码所需的所有依赖项(程序集)所在的目录。您可以使用/startUpDirectory选项,如下所述:

指定工作目录

Migrate.exe MyApp.exe /startupConfigurationFile=”MyApp.exe.config” /startupDirectory=”c:MyApp”

如果程序集具有依赖项或读取相对于工作目录的文件,则需要设置startupDirectory。

找到了解决方案(我最终从http://entityframework.codeplex.com/以及调试迁移控制台应用程序)。

显然,MyProject.Data.dll的所有依赖项都需要与它和migrate.exe复制到同一个文件夹中,否则Entity Framework migrate.exe工具将抛出上面的误导性错误消息。

在这种情况下,实体框架确实可以使用更好的错误处理和更清晰的错误消息。

作为对实体框架devs的引用:TypeFinder.cs中的以下代码返回了null类型,因为MyProject.Data.dll的依赖项没有复制到migrate.exe的文件夹中:

type = _assembly.GetType(typeName, false);

最新更新