簡體   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