如何在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
相关产品推荐
相关产品推荐

