You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core+OracleDB初始迁移时无法创建DbContext的问题

Oracle EF Core迁移报错:get_LockReleaseBehavior方法未实现

问题场景

在基于OracleDB的全新EF Core解决方案中执行首次迁移,运行JetBrains Rider自动生成的命令:

"C:\Program Files\dotnet\dotnet.exe" ef migrations add --project IS.Terminals.VGM.Infrastructure\IS.Terminals.VGM.Infrastructure.csproj --startup-project IS.Terminals.VGM\IS.Terminals.VGM.csproj --context IS.Terminals.VGM.VGMContext --configuration Debug --verbose Initial --output-dir Migrations

触发错误:

Unable to create a 'DbContext' of type 'IS.Terminals.VGM.VGMContext'. The exception 'Method 'get_LockReleaseBehavior' in type 'Oracle.EntityFrameworkCore.Migrations.Internal.OracleHistoryRepository' from assembly 'Oracle.EntityFrameworkCore, Version=8.0.23.1, Culture=neutral, PublicKeyToken=89b483f429c47342' does not have an implementation.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

已做排查

  • 未找到get_LockReleaseBehavior方法的相关公开信息
  • 错误提示加载的Oracle.EntityFrameworkCore版本为8.0.23.1,但项目.csproj中配置的是8.23.60版本
  • 执行dotnet nuget locals all --clear清理NuGet缓存,无效
  • 存在一个可正常执行迁移的参考解决方案
  • 怀疑是包版本冲突,但暂未找到解决路径

可行解决步骤

1. 定位依赖版本冲突源

  • 打开解决方案的NuGet包管理界面,查看所有项目中Oracle.EntityFrameworkCore的实际安装版本,确认是否有间接依赖引入了8.0.23.1版本
  • 执行命令列出所有直接/间接依赖,定位低版本包的来源:
    dotnet list package --include-transitive
    

2. 强制统一Oracle包版本

  • 在解决方案根目录创建或修改Directory.Packages.props文件,全局指定Oracle.EntityFrameworkCore版本为8.23.60,确保所有项目统一使用该版本:
    <Project>
      <PropertyGroup>
        <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
      </PropertyGroup>
      <ItemGroup>
        <PackageVersion Include="Oracle.EntityFrameworkCore" Version="8.23.60" />
      </ItemGroup>
    </Project>
    
  • 若未使用集中版本管理,直接在每个项目的.csproj文件中明确指定Oracle.EntityFrameworkCore版本,排除间接依赖的干扰

3. 彻底清理与重建

  • 删除所有项目的bin和obj目录
  • 执行命令清理并重建解决方案:
    dotnet clean
    dotnet build
    
  • 清理JetBrains Rider本地缓存(路径示例:C:\Users\<用户名>\.Rider<版本号>\system\caches),重启Rider后重试迁移

4. 对比参考解决方案配置

  • 导出参考解决方案的依赖列表:
    dotnet list package > reference-packages.txt
    
  • 与当前解决方案的依赖列表对比,找出EF Core及Oracle驱动相关的版本差异,同步调整
  • 检查参考解决方案中DbContext的设计时初始化逻辑,比如是否实现了IDesignTimeDbContextFactory接口,或是否有特殊构造函数,确保当前项目逻辑一致

5. 验证版本兼容性

  • 确认Oracle.EntityFrameworkCore 8.23.60与当前使用的Microsoft.EntityFrameworkCore主版本完全匹配(Oracle EF Core版本需与EF Core主版本对应,如EF Core 8.x对应Oracle EF Core 8.x系列),若不匹配则调整到兼容版本

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:51:19