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

.NET Core 2.1升级至6后用Devart执行存储过程报MissingMethodException错误

问题描述

我将应用程序的SDK和依赖项从.NET Core 2.1升级到了.NET Core 6,但在运行数据库存储过程时遇到了问题。我用于执行存储过程的代码如下:

public int ExecuteProcedure(string procedure, params object[] parameters)
    {
        List<OracleParameter> oracleParameterList = ((List<OracleParameter>)parameters[0]);
        string[] oracleParameters = new string[oracleParameterList.Count];
        string query = "BEGIN " + procedure + "(";
        for (int i = 0; i < oracleParameterList.Count; i++)
        {
            OracleParameter parameter = oracleParameterList[i] as OracleParameter;
            oracleParameters[i] = ":" + parameter.ParameterName;
        }
        query += string.Join(",", oracleParameters);
        query += "); end;";
        return Database.ExecuteSqlRaw(query, oracleParameterList);
    }

报错代码行为Database.ExecuteSqlRaw(query, oracleParameterList);,我使用Devart ORM进行数据库连接。

错误信息

System.MissingMethodException
  HResult=0x80131513
  Message=Method not found: 'Int64 RelationalExtensionInfo.GetServiceProviderHashCode()'.
  Source=Devart.Data.Oracle.Entity.EFCore
  StackTrace:
   at Devart.Common.Entity.EntityOptionsExtension.get_Info()
   at Microsoft.EntityFrameworkCore.DbContextOptions.GetHashCode()
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd[TArg](TKey key, Func`3 valueFactory, TArg factoryArgument)
   at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.GetOrAdd(IDbContextOptions options, Boolean providerRequired)
   at Microsoft.EntityFrameworkCore.DbContext.get_ContextServices()
   at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
   at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance()
   at Microsoft.EntityFrameworkCore.Infrastructure.Internal.InfrastructureExtensions.GetService[TService](IInfrastructure`1 accessor)
   at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure`1 accessor)
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.get_Dependencies()
   at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.Microsoft.EntityFrameworkCore.Storage.IDatabaseFacadeDependenciesAccessor.get_Dependencies()
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.GetFacadeDependencies(DatabaseFacade databaseFacade)
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.ExecuteSqlRaw(DatabaseFacade databaseFacade, String sql, IEnumerable`1 parameters)
   at IFFCO.HRMS.Entities.Models.ModelContext.ExecuteProcedure(String procedure, Object[] parameters) in C:\Users\110393\Desktop\update SDK 6\trunk\IFFCO.HRMS.Entities\Models\ModelContext.cs:line 648
   at IFFCO.HRMS.Service.AccountService.ValidateUser(LoginModel loginModel) in C:\Users\110393\Desktop\update SDK 6\trunk\IFFCO.HRMS.Service\AccountService.cs:line 60
   at IFFCO.HRMS.Web.Controllers.AccountController.Login(LoginViewModel loginViewModel) in C:\Users\110393\Desktop\update SDK 6\trunk\IFFCO.HRMS.Web\Controllers\AccountController.cs:line 73
问题原因

该报错是Devart Oracle EF Core驱动版本与EF Core 6版本不兼容导致的:

  • .NET Core 2.1对应使用EF Core 2.x版本,你之前安装的Devart驱动为适配EF Core 2.x的版本,内部依赖EF Core 2.x的底层API
  • 升级到.NET 6后,EF Core同步升级到6.x版本,微软在EF Core 3.x及后续版本中调整了RelationalExtensionInfo类的API实现,旧版Devart驱动依赖的GetServiceProviderHashCode()方法已被修改或移除,因此调用时抛出方法缺失异常。
修复方案
  • 升级Devart Oracle EF Core驱动:将Devart.Data.Oracle.Entity.EFCore包升级到适配EF Core 6的版本(大版本号≥9.14即可,注意所有Devart相关依赖包的版本要保持一致)
  • 统一EF Core官方包版本:确保项目中所有Microsoft.EntityFrameworkCore开头的依赖包版本统一为6.x稳定版,禁止不同大版本的EF Core包混装
  • 清理残留编译文件:升级依赖后删除项目的bin、obj文件夹,清理本地NuGet缓存后重新编译项目,避免旧版dll残留引发兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:04