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

如何在JoinedSubclassMapping中使用HiLo ID生成器

在JoinedSubclassMapping中配置HiLo ID生成器的解决方案

原ClassMapping下的HiLo配置

当使用ClassMapping<Foo>直接映射单表时,可正常配置HiLo ID生成器,示例代码如下:

public class FooMap: ClassMapping<Foo>
{
    public FooMap()
    {
        Table("FOO");
        Id(x => x.Id, x =>
        {
            x.Column("ID");
            x.Generator(Generators.HighLow,
                g => g.Params(new
                    { table = "HI_LO", where = "table_name = 'FOO'", max_lo = 1000 }));
        });
    }
}

遇到的问题

将Foo的部分字段迁移至数据库表BaseFoo后,打算采用每个类对应一张表的继承映射方式(Joined Subclass),但使用JoinedSubclassMapping<Foo>时无法调用Id(...)方法(提示“Cannot resolve symbol”),尝试多种方式均无法在子类映射中直接配置HiLo生成器。

可行解决方案

最终验证:将HiLo ID生成器配置在父类的映射类中即可满足需求,原本担心不符合预期,但实际测试完全可行。

示例配置如下:

父类BaseFoo的映射配置

public class BaseFooMap : ClassMapping<BaseFoo>
{
    public BaseFooMap()
    {
        Table("BASE_FOO");
        // 在父类中配置HiLo生成器
        Id(x => x.Id, x =>
        {
            x.Column("ID");
            x.Generator(Generators.HighLow,
                g => g.Params(new
                    { table = "HI_LO", where = "table_name = 'BASE_FOO'", max_lo = 1000 }));
        });
        // 配置BaseFoo的其他公共字段
    }
}

子类Foo的JoinedSubclass映射配置

public partial class FooMap: JoinedSubclassMapping<Foo>
{
    public FooMap()
    {
        Table("FOO");
        // 指定与父表关联的主键字段
        Key(x => x.Column("ID"));
        // 配置Foo类独有的字段
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:07:28