繁体   English   中英

在项目中管理Entity Framework的程序包管理器控制台命令

[英]Managing Package Manager Console commands for Entity Framework in project

在处理具有“非标准”构建的解决方案时,在包管理器控制台中输入的实体框架命令(如Add-MigrationUpdate-Database可能会变得相当长且复杂。

使用语法和选项,如:

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

Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] 
  [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String> 
  [-IgnoreChanges] [-AppDomainBaseDirectory <String>] [<CommonParameters>]

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] 
  [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] 
  [-ConnectionStringName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>]

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] 
  [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] 
  -ConnectionString <String> -ConnectionProviderName <String> 
  [-AppDomainBaseDirectory <String>] [<CommonParameters>]

在项目中管理这些命令有什么好的选择吗? 我经常发现自己创建一个带有注释和保存命令行的.txt文件,并将其保存在解决方案级别的“doc”文件夹中。 我根据需要从这里复制并粘贴命令,但似乎应该有更好的方法来处理这些命令。

理想情况下,我希望能够为Package Manager控制台创建一个“批处理文件”(或类似的东西),它可以采用简化的选项并将其扩展为完整的命令。 例如,我运行Add-Migration-Ex MyNewMigration ,它将扩展为完整的Add-Migration命令,并应用当前项目的所有其他标准选项和开关。

有没有更简单的方法来管理这些类型的复杂命令,使它们更容易保存并在每个项目/解决方案级别上运行?

经过大量的研究,我发现NuGet有一个系统可以在解决方案负载下运行power-shell脚本。 Nuget将在包的“tools”目录中查找名为“init.ps1”的脚本,并在解决方案加载时执行它。 我将利用它,并创建一个在解决方案加载时运行的NuGet包,它将检查名为“SolutionCommands”的解决方案中的目录。 然后它将运行任何脚本,并安装位于该目录中的任何模块。 这些脚本可以作为Visual Studio中解决方案的一部分进行管理,通过版本控制遵循解决方案,并自动分发给团队中的所有开发人员。

我已经为Nuget创建了初步 ,现在可以为任何想要这个功能的人提供。 它还没有真正测试过,脚本需要在它们运行之前签名(或者计算机的安全策略放松)。


init.ps1:

$oldLocation = Get-Location

$oldWarningPref = $WarningPreference
$WarningPreference = 'SilentlyContinue'

$commandDirectory = ".\SolutionCommands"

If(Test-Path $commandDirectory)
{
    Write-Host "Installing Modules..."
    Get-ChildItem $commandDirectory -Filter "*.psm1" |
    ForEach-Object {
        $fullPath = Join-Path -Path $commandDirectory -ChildPath $_.Name
        $fileName = Split-Path -Path $fullPath -Leaf
        $fileNameNoExtension = [System.IO.Path]::GetFileNameWithoutExtension($fullPath)

        if (Get-Module | ?{ $_.Name -eq $fileNameNoExtension })
        {
            Remove-Module $fileNameNoExtension
        }
        Import-Module ($fullPath)

        Write-Host "Loaded module: " $fullPath
        Write-Host "      Commands: " (Get-Command -Module $fileNameNoExtension)
        Write-Host
    }

    Write-Host "Executing Scripts..."
    Get-ChildItem $commandDirectory -Filter "*.ps1" |
    ForEach-Object {
        $fullPath = Join-Path -Path $commandDirectory -ChildPath $_.Name
        Write-Host $fullPath
        . $fullPath
    }
}

Set-Location $oldLocation
$WarningPref = $oldWarningPref

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM