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

JsonApiDotNetCore中CommitAsync方法未实现异常排查求助

问题诊断与解决方案

核心问题

你遇到的Unable to load one or more of the requested types. Method 'CommitAsync' in type 'JsonApiDotNetCore.Extensions.SafeTransactionProxy'...异常,本质是JsonApiDotNetCore与Entity Framework Core/ASP.NET Core的版本不兼容。

JsonApiDotNetCore 3.1.0版本的SafeTransactionProxy类在实现EF Core异步事务接口时,与你当前使用的EF Core版本中CommitAsync方法的签名不匹配,或者该版本的JsonApiDotNetCore存在实现缺失,导致运行时无法加载类型。

解决方案

  1. 统一框架版本
    检查项目中ASP.NET Core、EF Core、JsonApiDotNetCore的NuGet包版本,确保三者大版本一致:

    • JsonApiDotNetCore 3.x系列对应ASP.NET Core 3.x + EF Core 3.x
    • 如果使用ASP.NET Core 5+/EF Core 5+,需升级JsonApiDotNetCore到对应大版本(如5.x/6.x)
  2. 清理并重新安装依赖

    • 删除项目目录下的bin和obj文件夹
    • 清理NuGet缓存:在终端执行dotnet nuget locals all --clear
    • 重新安装所有NuGet包,确保无版本冲突残留
  3. 验证事务接口匹配性
    若坚持使用当前版本,可检查EF Core中IDbContextTransaction接口的CommitAsync方法签名,确认是否包含CancellationToken参数(JsonApiDotNetCore通常期望该参数存在)。

代码优化建议

1. 控制器规范调整

继承JsonApiController<T>后,无需自定义普通[HttpGet]方法,JsonApiDotNetCore已提供符合JSON:API规范的REST接口。若需扩展业务逻辑,建议通过重写ResourceService的方法实现,而非自定义Action。

2. EF Core存储过程调用优化

Service中手动管理SqlConnection的方式不符合EF Core最佳实践,可改用EF Core内置的存储过程调用:

// 先在AppDbContext中注册DbSet
public DbSet<Pitch> Pitches { get; set; }

// Service中的GetPitches方法简化为:
public async Task<List<Pitch>> GetPitches()
{
    return await _appDbContext.Pitches
        .FromSqlRaw("EXEC [PitchPower2].[uspGetPitches]")
        .ToListAsync();
}

3. Startup配置简化

ASP.NET Core 3.x中,配置可简化为:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AppDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("Connection")));

    services.AddJsonApi<AppDbContext>();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseJsonApi();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:35:15