[英]Your target project 'XXX' doesn't reference EntityFramework. This package is required
誰能指出我出錯的方向。 我正在嘗試使用 SQLite(控制台應用程序 .NET Core 3.1)在 EFCore 上進行遷移
運行任何命令,例如 enable-migrations 或 update-database 都會出現錯誤;
您的目標項目“XXX”沒有引用 EntityFramework。 這個包是為了讓 Entity Framework Core Tools 工作。 確保您的目標項目正確,安裝包,然后重試。
如果我使用 EFCore,需要 EntityFramework 似乎有點奇怪?
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
還有另一種方法可以做到這一點:
我們需要使用 DbContext 的工廠來在設計時創建遷移。
我們實現 IDesignTimeDbContextFactory 接口,因為按照慣例,當在 DbContext 同一個項目或啟動項目中發現實現該接口的類時,EFCore 會放棄其他創建 DbContext 的方式,將使用工廠。
見實現示例:
public class MyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
{
public MyDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionsBuilder.UseSqlServer("Your ConnectionString Here");
return new MyDbContext(optionsBuilder.Options);
}
實現后,將包含 DbContext 的項目設置為啟動和默認項目,並嘗試創建遷移:
//.Net Core CLI:
dotnet ef migrations Add Initial -p .\src\Data\Data.csproj -s .\src\Data\Data.csproj
//Package Manager Console
Add-Migration Initial -p .\src\Data\Data.csproj -s .\src\Data\Data.csproj
嗯,這是一個奇怪的解決方案,令我驚訝的是它奏效了!
只需從 VS 安裝程序更新 Visual Studio 並重新啟動它。 這將刪除所有不必要的包,重新安裝包將解決 EF 和 EF 核心包沖突。 然后運行您的遷移,您將看到錯誤將消失。
希望這可以幫助。
我在安裝了 EF Core 和 EF6 的項目中遇到了這個問題。
我在創建遷移時不斷收到消息:
Entity Framework 6 和 Entity Framework Core 都已安裝。 Entity Framework 6 工具正在運行。 對 Entity Framework Core 使用“EntityFrameworkCore\\Add-Migration”。
這是大型解決方案( .Net Framework和.Net Core )的一部分,沒有辦法讓它只使用其中一個。
這特別發生在核心部分。
我嘗試過的,可能我會建議的是:
嘗試修復您的 Visual Studio 安裝。
在Visual Studio中正確設置“啟動項目”,在包管理器控制台中正確設置“默認項目”。
用於 EF6:
EntityFramework\\Add-Migration <MIGRATIONNAME>
對於 EF 核心:
EntityFrameworkCore\\Add-Migration <MIGRATIONNAME>
這三件事的結合幫助了我。
正如其他人沒有弄清楚的那樣,但我確信同時擁有 EF6 和 EF Core 是罪魁禍首。 我在這里記錄了我的旅程: https ://github.com/dotnet/efcore/issues/27051
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.