谁能指出我错了的方向。我试图通过SQLite(Console App .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>
答案 0 :(得分:4)
还有一种方法可以做到这一点:
我们需要使用 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
答案 1 :(得分:3)
就我而言,我遇到了同样的异常,因为我安装了 EntityFrameWork 包和 EntityFrameWorkCore。我将后者用于我的库中执行 SqlCommand 的一些较旧的函数。
即使在我删除了 EntityFramework 包之后,安装这两个包也完全清理了我的项目。 Michael Browns 的评论给了我一个提示,因为我最终不得不按照以下建议完全重置我的 EntityFramework Migrations: Reset Entity Framework
答案 2 :(得分:1)
嗯,这是一个奇怪的解决方案,令我惊讶的是它起作用了!
只需从VS安装程序更新Visual Studio并重新启动即可。这将删除所有不必要的软件包,然后重新安装软件包将解决您的EF和EF核心软件包冲突。然后运行您的迁移,您将看到错误将消失。
希望这会有所帮助。