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

Servicestacks GenerateCrudServices生成错误SQL及代码生成失效问题

问题解决方案

1. 修复GetTableSchemas()的SQL语法错误

SQL Server要求OFFSET ... FETCH必须搭配ORDER BY,你可以全局覆盖GetTableSchemas方法,改用TOP 1的写法规避该问题:

GenerateCrudServices = new GenerateCrudServices
{
    DbFactory = dbFactory,
    // 全局替换SQL生成逻辑,避免OFFSET FETCH语法问题
    GetTableSchemas = (db) => 
        db.GetTableSchemas(db.From<SqlTable>()
            .Select(SqlTable.AllColumns)
            .Take(1)
            .ToSql()),
    // 其他配置项...
};

也可以给OFFSET FETCH补充固定排序条件:

GetTableSchemas = (db) => 
    db.GetTableSchemas("SELECT * FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY");

2. 解决配置被忽略、生成演示类的问题

配置未生效通常是演示项目的默认逻辑在干扰,按以下步骤排查:

  • 关闭自动注册:将AutoRegister设为false,避免自动加载演示项目的Crud服务:

    GenerateCrudServices = new GenerateCrudServices
    {
        DbFactory = dbFactory,
        AutoRegister = false, // 关键:阻止自动注册演示服务
        CreateServices = {
            new CreateCrudServices { Schema = "lookup", IncludeTables = ["absence"]},
        },
    };
    
  • 验证数据库连接:检查dbFactory的连接字符串,确保连接的是你的SQL Server数据库而非演示默认库,可通过服务端日志确认实际连接的数据库信息。

  • 清理缓存/指定输出路径:执行x csharp时可能读取旧缓存文件,先删除已生成的dtos.cs再重新执行,或指定输出路径避免覆盖:

    x csharp https://localhost:5001 -o ./MyCustomModels.cs
    
  • 移除演示服务注册:如果项目中存在针对booking等演示表的CrudServices注册代码,需完全删除,避免和自定义配置冲突。

  • 检查表名与Schema:确认SQL Server中存在lookup.absence表,配置中的名称拼写、大小写是否匹配(SQL Server默认不区分大小写,但拼写错误会导致无法识别)。

3. 自定义GetTableColumns的正确姿势

若要为特定服务自定义GetTableColumns,需将配置放在对应CreateCrudServices实例内部,而非全局:

CreateServices = {
    new CreateCrudServices 
    { 
        Schema = "lookup",
        IncludeTables = ["absence"],
        GetTableColumns = (IDbConnection db, string table, string schema) =>
            db.GetTableColumns($"SELECT TOP 1 * FROM {SqlServerDialect.Provider.GetQuotedTableName(table, schema)}")
    },
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:32:42