SqlSugar 自定义分表查询时报错:“中文提示 : 分表表名需要占位符 {year}”

今天写项目的时候发现了一个问题找了很久。先说环境,我的数据库是pgsql,程序ORM框架是SqlSugarCore v5.1

需要进行分表操作,我的代码大概是这样的:

    /// 
    /// 通道数据存储
    /// 
    [SugarTable("Student")]
    [SplitTable(SplitType._Custom01)]
    public class StudentModel
    {
        /// 
        /// 主键雪花ID
        /// 
        [SugarColumn(IsPrimaryKey = true)]
        public long Id { get; set; }

        /// 
        /// 分表标识(编号)
        /// 
        [SplitField]
        public string? Code { get; set; }

        /// 
        /// 名称
        /// 
        [SugarColumn(IsNullable = true, Length = 255)]
        public string? Name { get; set; }

        /// 
        /// 值
        /// 
        public double Value { get; set; }
    }

这个是Model,看上去没什么问题对吧?(也确实没问题)

重写ISplitTableService 这个官网上很全面,我就不放上来了。

接下来划重点!!!

我的插入方法是这样的

        /// 
        /// 批量插入数据
        /// 
        /// 
        public void InsertModelAsync(List models)
        {
            _dbClient.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService = new CodeSplitService();
            _dbClient.Insertable(models).SplitTable().ExecuteReturnSnowflakeIdList();
        }

它可以正常工作,但是我的查询方法是这样的:

        /// 
        /// 查询所有数据
        /// 
        public List QueryData(string tableName)
        {
            return _dbClient.Queryable(tableName).SplitTable(s => s.ContainsTableNames(tableName))
                .ToList();
        }

运行查询方法的时候,程序出现异常,异常提示为:“中文提示 : 分表表名需要占位符 {year}”

查了很多地方,最后发现是因为没有指定分表后ISplitTableService服务的指向,后来在查询方法前加上了

_dbClient.CurrentConnectionConfig.ConfigureExternalServices.SplitTableService = new CodeSplitService();

这句话就可以了。

最开始我将这句代码放在构造函数中,以为只在这个Service服务中声明一次就可以了,但是自定义分表好像不能这样干。需要在查询方法之前再次声明。

以上,感谢各位看官老爷。

你可能感兴趣的:(C#编程及开源库应用,c#,数据库)