ServiceStack Blazor模板启动报错:GenerateCrudServices.DbFactory未配置
解决ServiceStack v8.0.1中GenerateCrudServices.DbFactory未配置的错误
你遇到的错误是因为AutoQuery的GenerateCrudServices需要明确配置DbFactory来获取数据库连接,而使用ef-sqlserver mixin时需要用ServiceStack的EfConnectionFactory来适配Entity Framework的DbContext。以下是具体的解决步骤:
1. 确认EF DbContext已正确注册
首先确保Configure.Db.cs(或Program.cs)中已注册你的EF DbContext并配置了连接字符串,x mix ef-sqlserver通常会自动生成类似代码:
public void Configure(IWebHostBuilder builder) => builder .ConfigureServices(services => { var connectionString = builder.GetConfiguration().GetConnectionString("DefaultConnection"); services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString)); });
2. 在Configure.AutoQuery.cs中配置IDbConnectionFactory和GenerateCrudServices
修改Configure.AutoQuery.cs,使用EfConnectionFactory适配EF DbContext,并通过服务提供者解析IDbConnectionFactory赋值给GenerateCrudServices.DbFactory:
public void Configure(IWebHostBuilder builder) => builder .ConfigureServices(services => { // 注册ServiceStack的IDbConnectionFactory,适配EF的DbContext services.AddSingleton<IDbConnectionFactory>(sp => new EfConnectionFactory(sp.GetRequiredService<DbContextOptions<AppDbContext>>())); // 配置AutoQuery,通过服务提供者获取已注册的DbFactory services.AddPlugin(sp => new AutoQueryFeature { MaxLimit = 1000, IncludeTotal = true, GenerateCrudServices = new GenerateCrudServices { DbFactory = sp.GetRequiredService<IDbConnectionFactory>(), AutoRegister = true } }); });
原理说明
EfConnectionFactory是ServiceStack提供的适配器,它将Entity Framework的DbContextOptions包装成ServiceStack的IDbConnectionFactory接口,让AutoQuery能和EF协同工作。- 使用
services.AddPlugin(sp => ...)的重载,可以在插件初始化时从已构建的服务提供者中解析依赖,避免提前构建服务提供者可能带来的问题。
完成以上配置后,重新启动应用即可解决GenerateCrudServices.DbFactory is not configured的错误。
内容的提问来源于stack exchange,提问作者Shawn de Wet
相关产品推荐
相关产品推荐

