You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无法添加迁移:未找到Oracle.ManagedDataAccess.Client对应的EF提供程序

解决EF Core迁移时找不到Oracle提供程序的问题

嗨,我之前也踩过这个一模一样的坑!你遇到的System.InvalidOperationException本质是Entity Framework Core找不到对应Oracle ADO.NET驱动的EF提供程序,给你几个一步步排查解决的办法:

1. 确保安装了正确的NuGet包

首先要确认你的项目里装了Oracle.EntityFrameworkCore(这是EF Core专用的Oracle提供程序,别装成EF6用的Oracle.ManagedDataAccess.EntityFramework了):

  • 用Package Manager Console安装:
    Install-Package Oracle.EntityFrameworkCore
    
  • 或者用dotnet CLI:
    dotnet add package Oracle.EntityFrameworkCore
    

顺带确认下Oracle.ManagedDataAccess.Client也已安装,不过通常装EF包时会自动引入这个依赖,保险起见可以检查一下。

2. 检查DbContext的配置是否正确

不管是在DbContext的OnConfiguring方法里,还是在项目的服务配置中,都要明确指定使用Oracle的EF提供程序:

方式一:在DbContext类中配置

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (!optionsBuilder.IsConfigured)
    {
        // 替换成你的连接字符串
        optionsBuilder.UseOracle("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));Persist Security Info=True;User Id=xxxxxx;Password=xxxxxxxxxxx;");
    }
}

方式二:在Program.cs/Startup.cs中配置服务

services.AddDbContext<YourDbContextName>(options =>
    options.UseOracle(Configuration.GetConnectionString("OracleConnection")));

3. 修正迁移命令的参数

你用的-ConnectionProviderName参数值是Oracle.ManagedDataAccess.Client,这是ADO.NET驱动的名称,但EF Core需要对应它的EF提供程序。不过其实如果已经正确配置了DbContext,这个参数可以省略;如果一定要加,确保你的项目里已经注册了对应的提供程序映射。

4. .NET Framework项目额外配置(如果适用)

如果你的项目是.NET Framework,还需要在web.configapp.config里添加EF提供程序的注册:

<entityFramework>
  <providers>
    <provider invariantName="Oracle.ManagedDataAccess.Client" 
              type="Oracle.EntityFrameworkCore.OracleProviderServices, Oracle.EntityFrameworkCore" />
  </providers>
</entityFramework>

按上面的步骤来,基本就能解决这个找不到提供程序的问题了!

内容的提问来源于stack exchange,提问作者Toolkit

火山引擎 最新活动