[英]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 Click
並Set as startup
為非 ASPNET CORE 項目的Set as startup
,都會出現這種錯誤。
當我將 EntityFramework 更新到 6.3.0 版時遇到了同樣的問題,所以當我回到 6.2.0 時它解決了這個問題,所以我建議你也這樣做
卸載實體框架對我不起作用。
事實證明,導致問題的不是Visual Studio
或Entity Framemwork
,而是我運行的是PowerShell 2
(在Windows 7
)。
Entity Framework
和Visual 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.