簡體   English   中英

實體框架代碼第一次遷移錯誤

[英]Entity Framework Code First Migration Error

我是 MVC 4 和實體框架的新手,當我從包管理器控制台運行此命令時:

Enable-Migrations -ContextTypeName MyFirstMvcApp.Models.InventoryDbContext

加入路徑:無法將參數綁定到參數“路徑”,因為它為空。

我收到以下錯誤:

Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:363 char:27
+     $toolsPath = Join-Path <<<<  $installPath tools
    + CategoryInfo          : InvalidData: (:) [Join-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand

Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:392 char:73
+     $utilityAssembly = [System.Reflection.Assembly]::LoadFrom((Join-Path <<<<  $toolsPath EntityFramework.PowerShell.Utility.dll))
    + CategoryInfo          : InvalidData: (:) [Join-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand

You cannot call a method on a null-valued expression.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:393 char:50
+     $dispatcher = $utilityAssembly.CreateInstance <<<< (
    + CategoryInfo          : InvalidOperation: (CreateInstance:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Join-Path : Cannot bind argument to parameter 'Path' because it is null.
At D:\GitProjects\MyFirstMvcApp\trunk\packages\EntityFramework.6.0.0-alpha2\tools\EntityFramework.psm1:426 char:19
+         (Join-Path <<<<  $runner.ToolsPath EntityFramework.PowerShell.dll),
    + CategoryInfo          : InvalidData: (:) [Join-Path], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.JoinPathCommand

我該如何解決? 請注意,我使用的是帶有 SP1 的 Visual Studio 2010 Ultimate,並且我已在此鏈接中安裝了 MVC4。

通過卸載並重新安裝實體框架來修復它。 為了他人的利益,這里是命令...

卸載:

PM> Uninstall-Package EntityFramework -Force

卸載后,重新安裝EntityFramework:

PM> Install-Package EntityFramework -Pre

那里! 它是固定的。 雖然我仍然不知道是什么導致了問題。

Visual Studio 2019:Uninstall-Package EntityFramework -Force

然后

安裝包 EntityFramework -Pre -Version 6.2.0

v6.3.0 有問題

我遇到了同樣的問題,這就是我解決問題的方法,

我正在使用 Visual Studio 2019,因此我安裝了最新的實體框架 6.3.0(stable) 我在運行 Enable-Migrations 命令時遇到了這個問題,我嘗試重新安裝實體框架,但它沒有用我已經從 Nuget 包管理器安裝了舊版本 6.2.0 顯然它可以工作。

嘗試了這里的所有東西。 我個人討厭在不知道問題是什么的情況下解決問題。 在論壇中挖掘這似乎是在啟動項目是 Web 應用程序時在 6.3.0 版本中引起的已知錯誤。 他們已經在日常構建中修復了它。 所以要解決它,你需要安裝它。

首先,卸載軟件包:

PM> Uninstall-Package EntityFramework -Force

然后安裝最新的每日構建(在我的情況下是以下一個)

PM> Install-Package EntityFramework -Version 6.4.0-preview1-19506-01

我在從“6.2.0”升級到 EntityFramework“6.3.0”時遇到了這個問題。 問題和解決方法可以在這里找到EF 6.3.0 PMC 命令 throw ParameterBindingValidationException when Startup Project is a Web App

當你有多個項目並且你將一個 ASP.NET 項目設置為 Startup 項目時就會出現問題

鏈接建議的解決方法:

如果您向解決方案添加了一個新的虛擬控制台應用程序並將 EntityFramework 的每日構建安裝到其中,則將使用包含修復程序的命令版本。 這些命令適用於引用 EF 6.3 的項目。

個人解決方案:

將啟動項目設置為非 ASP.NET 項目解決了我的問題。 請注意,如果您正在使用連接字符串,則必須將它們復制到相關項目的配置文件中。

若干年后...
此問題的另一個可能原因是 VS 2017 csproj 格式 - 或者更好地說,與使用 packages.config 相比的 PackageReference 方法。

使用在項目文件中使用 PackageReference 格式包含 Nuget 包的新方法時,不會執行 EntityFramework 的安裝腳本(這是包含 nuget 包的這種新方法的已知事實)。 因此,PowerShell 命令尚未准備好執行。

Entity Framework GitHub 存儲庫上正在討論該問題。
在修復(由 NuGet 人員或 EF 人員)以運行遷移(談論 EF 6 - 而不是 EF Core!)之前,您需要堅持使用包包含 Nuget 包的“舊”方式。配置方法。

檢查您的 Visual Studio 設置
Tools -> Options -> NuGet Package Manager -> General並確保
Default package management format設置為Packages.config

請注意,切換此設置時,您必須卸載所有包,保存項目,重新啟動 Visual Studio,然后重新安裝所有包。
在 VS 2017 的當前版本中(我認為從 v 15.4 開始)有從 Packages.config 到 PackageReference 的自動轉換,但反之亦然(不幸的是)。

我遇到了同樣的問題並通過更改Startup Project解決了它。

我在同一個解決方案中有 5 個項目,每次我Right ClickSet as startup為非 ASPNET CORE 項目的Set as startup ,都會出現這種錯誤。

當我將 EntityFramework 更新到 6.3.0 版時遇到了同樣的問題,所以當我回到 6.2.0 時它解決了這個問題,所以我建議你也這樣做

卸載實體框架對我不起作用。

事實證明,導致問題的不是Visual StudioEntity Framemwork ,而是我運行的是PowerShell 2 (在Windows 7 )。

Entity FrameworkVisual Studio需要PowerShell 3

更新並重新啟動后,問題消失了。 希望這會幫助一些人。

您可以在此處找到 PowerShell -> https://www.microsoft.com/en-us/download/details.aspx?id=40855

就我而言,上述解決方案均無效,因此我快速查看了 packages.config 文件,令我驚訝的是發現實體框架的兩個條目

<package id="EntityFramework" version="6.1.1" targetFramework="net45" />
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />

請注意,它們是不同的版本,不確定這實際上是如何發生的。 無論如何,一旦我從 packages.config 文件中刪除了舊的,即最終得到了這個:

<package id="EntityFramework" version="6.1.3" targetFramework="net45" />

然后我可以毫無問題地啟用遷移。

我在使用 Code First 遷移時遇到了同樣的問題。

對我有用的是轉到 NuGet 數據包管理器,然后搜索Entity Framework 在那里我安裝了Pre-release version ,然后我選擇了Latest Stable version並安裝了它。

之后一切都運行得很完美。

從 6.3 版開始,實體框架工具支持新的 SDK 樣式項目格式。

但是,當包含遷移的項目使用新的 SDK 樣式格式,而啟動項目使用經典的 csproj 格式時,此問題仍然可能發生。

要解決此問題,請使兩個項目使用相同的 csproj 格式。

與上述建議共享這里是我的補充。

PM> Uninstall-Package EntityFramework -Force Then;

PM> Install-Package EntityFramework -Pre

以上這兩個動作還不夠。 我需要做下一個:

然后在解決方案資源管理器中,在根級別的項目中使用以下代碼創建一個類 - 在我的情況下。 然后自動創建包含 Configurations.cs 文件的 Migrations 文件夾。

public class MyDbContext : DbContext
{
pubic MyDbContext()
{
}

}

我想添加我在遇到此問題時發現的其他內容。

事實證明,在我的情況下(運行 Visual Studio 2017,實體框架 6.2),問題是項目位於遠程目錄 (\\server\\user\\location) 而不是本地目錄。

將項目復制到本地位置后,該命令可以正常運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM