根因:PlatformDbContext 注册时缺少 UseSnakeCaseNamingConvention, 导致 EF 查询用 PascalCase 列名("Id")但实际表是 snake_case("id"), 报 column u.Id does not exist。
31 lines
1.4 KiB
C#
31 lines
1.4 KiB
C#
using Volo.Abp.DependencyInjection;
|
||
|
||
namespace BuildFlow.Host.Configuration;
|
||
|
||
/// <summary>
|
||
/// 注册 ABP 与 ASP.NET Core 管线之间的双向访问桥。
|
||
/// ABP 模块的 <c>OnApplicationInitialization</c> 通过 <c>context.GetApplicationBuilder()</c> /
|
||
/// <c>context.GetEndpointRouteBuilder()</c> 取回这些 ObjectAccessor,从而在 ABP 模块里装配中间件、
|
||
/// 映射 Hub 等。每个 accessor 同时注册「具体类型」与 <c>IObjectAccessor<T></c> 接口两份,
|
||
/// 兼容 ABP 内部按接口解析与宿主按具体类型解析两种获取方式。
|
||
/// </summary>
|
||
public static class HostObjectAccessors
|
||
{
|
||
public static IServiceCollection AddHostObjectAccessors(this IServiceCollection services)
|
||
{
|
||
services.AddAccessor(new ObjectAccessor<IApplicationBuilder>());
|
||
services.AddAccessor(new ObjectAccessor<WebApplication>());
|
||
services.AddAccessor(new ObjectAccessor<IHost>());
|
||
services.AddAccessor(new ObjectAccessor<IEndpointRouteBuilder>());
|
||
return services;
|
||
}
|
||
|
||
/// <summary>同时注册 accessor 的具体类型与 <see cref="IObjectAccessor{T}"/> 接口,单一注册点避免重复。</summary>
|
||
private static void AddAccessor<T>(this IServiceCollection services, ObjectAccessor<T> accessor)
|
||
where T : class
|
||
{
|
||
services.AddSingleton(accessor);
|
||
services.AddSingleton<IObjectAccessor<T>>(accessor);
|
||
}
|
||
}
|