Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 脚本EF将迁移添加到自动生成任务中_Entity Framework_Entity Framework 5_Build Automation_Entity Framework Migrations - Fatal编程技术网

Entity framework 脚本EF将迁移添加到自动生成任务中

Entity framework 脚本EF将迁移添加到自动生成任务中,entity-framework,entity-framework-5,build-automation,entity-framework-migrations,Entity Framework,Entity Framework 5,Build Automation,Entity Framework Migrations,我的所有ef代码首次迁移都在一个名为migrations 在package manager控制台中,我键入添加迁移xyz,它构建了迁移 是否可以从visual studio外部执行此操作?我正在使用rake脚本为我的构建进行大量自动化,但这是我还没有完全掌握的一部分。这里的目标是做到以下几点 rakedb:add_migration“xyz” 这将运行一些命令并将迁移添加到指定的项目中。这是唯一一点,我还没有能够想出如何自动化呢!我可能会在这一过程中加入其他任务,比如删除和创建数据库,以及将迁移

我的所有ef代码首次迁移都在一个名为
migrations

在package manager控制台中,我键入
添加迁移xyz
,它构建了迁移

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

rakedb:add_migration“xyz”

这将运行一些命令并将迁移添加到指定的项目中。这是唯一一点,我还没有能够想出如何自动化呢!我可能会在这一过程中加入其他任务,比如删除和创建数据库,以及将迁移导出到脚本,以便可以在我的roundhouse迁移下运行

相关材料

Add-Migration [-Name] <String> [-Force]
[-ProjectName <String>] [-StartUpProjectName <String>]
[-ConfigurationTypeName <String>] [-ConnectionStringName <String>]
[-IgnoreChanges] [<CommonParameters>]
我可以在文件
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
术语“EntityFramework.psm1”未被识别为cmdlet的名称,
函数、脚本文件或可操作程序。检查名字的拼写,
或者,如果包含路径,请验证路径是否正确,然后重试。
第1行字符:21

+EntityFramework.psm1必须从Visual Studio中运行EF Powershell命令才能工作。您可以从命令行使用,但它不支持添加新迁移。

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

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

get { return (Project)_domain.GetData("project"); }
Project
EnvDTE.Project
,它(如果我用谷歌搜索正确的话)是与IDE接口的一种方式。进一步的源代码阅读表明,文件是通过与IDE接口添加到项目中的

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

编辑 我又回到这个问题上,发现这是可能的。还有一个问题描述了如何在visual studio之外使用EnvDTE,例如从命令行应用程序:

因此,如果在调用
AddMigrationCommand
类之前,应用程序域准备了适当的EnvDTE对象,那么确实可以在
EntityFramework.PowerShell.dll
周围编写自己的.exe包装。要做到这一点,您必须分析实体框架源代码,以了解如何愚弄脚手架代码,使其相信它在VisualStudio内部运行

因此,最终:这可能是可能的,但为它编写自己的工具将是一个非常重要的项目。

我遇到了一个类似的问题(自动添加迁移),并提出了所示的解决方案

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


一旦你有了代码,你可以把它发送到任何你想要的地方(就像添加到项目中的文件中一样。

你确定吗?有任何链接或参考来支持这一点吗?我们的codeplex网站上确实有一些项目跟踪我们migrate.exe体验的总体改进。如果你对从命令行生成迁移感兴趣,请随时加入那里的对话。(示例:)另外,根据上面Anders Abel的回答,可能可以包装/模拟VS DTE API,但我们从未尝试过。如果你让它工作起来,写下你是如何做到的,并让我们知道!很高兴知道,我可能会提出一个功能请求。我将在下周看看我如何使用console应用程序。不过,我必须启动一个博客来写它。我ike EF,但是集成到自动构建和部署中可能会更容易一些。为什么不只是使用自动迁移?如果这样做,就不会有审计跟踪。如果需要审计跟踪,您可以随时查看u MigrationHistory表。我将迁移导出到SQL文件,因为我需要可跟踪性。我从 RoundHouse因为它比migrate.exe功能更全面,所以您可以使用提供的migrate.exe,它位于已安装的Nuget软件包中。请参阅用法:@Neil:对此进行了更深入的研究。我认为我错了-可能是这样的(尽管并非微不足道)。太好了,我会做一个小小的控制台应用程序,看看是否能让DLL中的功能发挥出来。今天下午我做了一个快速的尝试,但现在我似乎有点不知所措。我肯定有一周左右的时间我可以混过去,但不幸的是,这似乎不是一个很好的利用时间的方法。谢谢你的帮助。
get { return (Project)_domain.GetData("project"); }