sqlite 您的目标项目“XXX”未引用EntityFramework,此软件包是必需的

ma8fv8wu  于 2023-05-23  发布在  SQLite
关注(0)|答案(5)|浏览(157)

有谁能告诉我哪里出了错。我正在尝试使用SQLite(控制台应用程序.NET Core 3.1)在EFCore上进行迁移
运行任何命令,如enable-migrations或update-database,都会出现错误;
您的目标项目“XXX”未引用EntityFramework。此包用于实体框架核心工具的工作。请确保目标项目正确,安装该包,然后重试。
如果我使用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>
uemypmqf

uemypmqf1#

在我的例子中,我得到了同样的异常,因为我安装了EntityFrameWork包沿着EntityFrameWorkCore。我在我的库中使用了一些旧的函数,这些函数执行SqlCommand。
安装这两个包完全擦洗我的项目,即使在我删除了EntityFramework包。Michael Browns的评论给了我一个提示,因为我最终不得不按照这个建议完全重置我的EntityFramework迁移:Reset Entity Framework

flvlnr44

flvlnr442#

还有另一种方法:
我们需要使用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
jmo0nnb3

jmo0nnb33#

好吧,这是一个奇怪的解决方案,令我惊讶的是,它的工作!
只需从VS安装程序更新Visual Studio并重新启动它。这将删除所有不必要的软件包,重新安装软件包将解决您的EF和EF核心软件包冲突。然后运行迁移,您将看到错误将消失。
希望这能帮上忙。

snvhrwxg

snvhrwxg4#

我遇到了这个问题,在项目中,我有两个EF核心和EF 6安装。
我在创建迁移时不断收到消息:
Entity Framework 6和Entity Framework Core都已安装。Entity Framework 6工具正在运行。对实体框架核心使用“EntityFrameworkCore\Add-Migration”。
如果我的工具默认为EF 6,我会收到消息
Entity Framework 6工具正在运行
然后我会得到错误消息,需要Entity Framework:
您的目标项目“MyProject.DataContext”未引用EntityFramework。此软件包是实体框架核心工具工作所必需的。请确保目标项目正确,安装该包,然后重试。
这是大解决方案(.Net Framework和**.Net Core**)的一部分,没有办法让它只使用其中之一。
这种情况在核心部分尤为明显。
我尝试过的,也可能是我的建议是:
1.尝试修复visual studio安装。
1.在Visual Studio中正确设置“启动项目”,在包管理器控制台中正确设置“默认项目”。
1.用于EF 6:

EntityFramework\Add-Migration <MIGRATIONNAME>

对于EF核心:

EntityFrameworkCore\Add-Migration <MIGRATIONNAME>

这三件事的结合帮助了我。
其他人还没有弄清楚,但我相信同时拥有EF 6和EF核心是罪魁祸首。我在这里记录了我的旅程:https://github.com/dotnet/efcore/issues/27051

r3i60tvu

r3i60tvu5#

移除EF包并重新安装它为我解决了这个问题

相关问题