5

我将所有 ef 代码首先迁移到一个名为Migrations

从包管理器控制台中,我输入Add-Migration xyz了一个迁移的脚手架

是否可以从 Visual Studio 外部执行此操作?我正在使用 rake 脚本为我的构建进行大量自动化,但这是我还没有完全掌握的部分。这里的目标是执行以下操作

rake db:add_migration "xyz"

这将运行一些命令并将迁移添加到指定的项目。这是我唯一无法弄清楚如何自动化的地方!我可能会构建其他任务,例如删除和创建数据库以及将迁移导出到脚本,以便它可以在我的回旋迁移下运行。

相关资料

Add-Migration [-Name] <String> [-Force]
[-ProjectName <String>] [-StartUpProjectName <String>]
[-ConfigurationTypeName <String>] [-ConnectionStringName <String>]
[-IgnoreChanges] [<CommonParameters>]

命令参考

我可以看到 EF 已从 nuget 安装到 packages 文件夹

packages\EntityFramework.5.0.0\tools

我可以在文件中看到EntityFramework.psm1

function Add-Migration
{
    [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')]
    param (
        [parameter(Position = 0,
....
}

但我不确定如何从命令行执行它。我试过了

..\packages\EntityFramework.5.0.0\tools>powershell EntityFramework.psm1 Add-Migration

但这会导致错误

The term 'EntityFramework.psm1' is not recognized as the name of a cmdlet, 
function, script file, or operable program. Check the spelling of the name, 
or if a path was included, verify that the path is correct and try again.
At line:1 char:21
    + EntityFramework.psm1 <<<<  Add-Migration
    + CategoryInfo          : ObjectNotFound: (EntityFramework.psm1:String) [],
                              CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
4

3 回答 3

6

查看EntityFramework.psm1它只是 EntityFramework.PowerShell.dll 的脚本外观。实际的添加迁移功能System.Data.Entity.Migrations.AddMigrationCommand在该程序集中的类中实现。

查看源代码,它通过以下行获取当前活动的项目(我假设这是在 powershell 控制台中选择的项目):

get { return (Project)_domain.GetData("project"); }

ProjectEnvDTE.Project哪个(如果我正确地用谷歌搜索的话)是与 IDE 交互的一种方式。一些进一步的源代码阅读表明,文件是通过与 IDE 接口添加到项目中的。

在我看来,脚手架代码与 Visual Studio 的集成度太高,无法作为命令行构建的一部分在 Visual Studio 之外运行。

编辑

我回到这个问题上并发现它可能是可能的。还有另一个 SO question 描述了如何在 Visual Studio 之外使用 EnvDTE,例如从命令行应用程序:

从另一个程序(不是插件)打开 DTE 解决方案

因此,如果在调用类EntityFramework.PowerShell.dll之前使用适当的 EnvDTE 对象准备了应用程序域,则确实可以编写自己的 .exe 包装器。AddMigrationCommand为此,您必须分析 Entity Framework 源代码,以了解如何欺骗脚手架代码以相信它在 Visual Studio 内部运行。

所以,最后:这可能是可能的——但为它编写自己的工具将是一个不平凡的项目。

于 2013-06-14T09:43:27.533 回答
4

EF Powershell 命令必须在 Visual Studio 中运行才能正常工作。从命令行,您可以使用migrate.exe,但它不支持添加新的迁移。

于 2013-06-13T19:55:53.167 回答
0

我遇到了类似的问题(自动添加迁移)并提出了此处显示的解决方案。

您可以创建一个控制台应用程序,该应用程序打开一个无头 Visual Studio 实例以获取项目参考。通过项目参考,您可以直接调用 EntityFramework 代码(而不是通过 Powershell)来触发迁移并取回代码。

获得代码后,您可以将其发送到您想要的任何位置(例如发送到添加到项目中的文件中。

于 2013-12-18T06:37:58.540 回答