SQLSugar 支持 TDengine 超级表的使用指南

TDengine 是一款高性能、分布式的时序数据库,广泛应用于物联网、工业互联网等领域。其核心概念之一是超级表(Super Table),它类似于传统数据库中的表结构模板,允许用户通过标签(Tag)动态创建和管理子表。SQLSugar 作为一款流行的 ORM 框架,提供了对 TDengine 超级表的支持,使得开发者能够更方便地操作 TDengine 数据库。

本文将介绍如何使用 SQLSugar 操作 TDengine 的超级表,包括创建超级表、查询子表、插入数据等操作。

1. 创建超级表

在使用 TDengine 的超级表之前,首先需要在数据库中创建超级表。SQLSugar 提供了 CodeFirst 模式,可以通过代码自动创建表结构。

NUGET安装

SqlSugar.TDengineCore 最新

SqlSugarCore 最新

创建数据库对象

复制代码
//程序启动时加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(TDengineProvider).Assembly };

//创建 db对象    
var db = new SqlSugarClient(new ConnectionConfig()
  {
      DbType = SqlSugar.DbType.TDengine,
      ConnectionString = Config.ConnectionString,
      IsAutoCloseConnection = true,
      ConfigureExternalServices = new ConfigureExternalServices()
      {
           EntityService= (property, column) =>
           {
               if (column.SqlParameterDbType == null) 
               {
                   //需要给列加上通用转换,这样实体就不需要一个一个转了 
                   column.SqlParameterDbType = typeof(CommonPropertyConvert);
               }
           }
      }
  }); 

// 创建超级表
db.CodeFirst.InitTables<SUsingTagModel>();

在上述代码中,SUsingTagModel 是一个实体类,它映射了 TDengine 中的超级表结构。通过 CodeFirst.InitTables 方法,SQLSugar 会自动在 TDengine 中创建对应的超级表。

2. 定义超级表实体类

在 SQLSugar 中,超级表的实体类需要使用 STableAttribute 来标记,并通过 SugarColumn 来定义字段属性。

复制代码
[STableAttribute(STableName = "SUsingTagModel", Tag1 = nameof(Tag1))]
public class SUsingTagModel
{
    [SqlSugar.SugarColumn(IsPrimaryKey = true)]
    public DateTime Ts { get; set; }
    public bool Boolean { get; set; }
    public string Tag1 { get; set; }
}
  • STableAttribute 用于标记该类为超级表,STableName 指定超级表的名称,Tag1 指定标签字段。

  • SugarColumn 用于定义字段属性,IsPrimaryKey 表示该字段为主键。

3. 查询超级表数据

SQLSugar 提供了 AsTDengineSTable 方法,用于将查询操作映射到 TDengine 的超级表。

查询所有数据

复制代码
var list1 = db.Queryable<SUsingTagModel>().AsTDengineSTable().ToList();

查询特定子表数据

通过 Where 条件可以查询特定标签的子表数据。

复制代码
// 查询子表A
var tagA = db.Queryable<SUsingTagModel>().AsTDengineSTable().Where(it => it.Tag1 == "a").ToList();

// 查询子表B
var tagB = db.Queryable<SUsingTagModel>().AsTDengineSTable().Where(it => it.Tag1 == "b").ToList();

4. 插入数据并动态创建子表

在插入数据时,SQLSugar 支持根据标签值动态创建子表。通过 SetTDengineChildTableName 方法,可以指定子表的命名规则。

复制代码
db.Insertable(new List<SUsingTagModel>(){
    new SUsingTagModel()
    {
        Boolean = true,
        Tag1 = "a",
        Ts = DateTime.Now.AddMilliseconds(1)
    },
    new SUsingTagModel()
    {
        Boolean = true,
        Tag1 = "b",
        Ts = DateTime.Now.AddMilliseconds(3)
    }
})
.SetTDengineChildTableName((stableName, it) => $"{stableName}_{it.Tag1}")
.ExecuteCommand();
  • SetTDengineChildTableName 方法用于指定子表的命名规则,stableName 是超级表的名称,it 是当前插入的数据对象。

  • ExecuteCommand 方法执行插入操作,并自动创建子表。

5. 动态映射超级表名称

在某些场景下,可能需要动态修改超级表的名称。SQLSugar 提供了 MappingSTableName 方法,可以在运行时动态映射超级表名称。

复制代码
db.MappingSTableName<SUsingTagModel>("newSName001");
  • MappingSTableName 方法用于动态修改超级表的名称,替换实体类中 STableAttributeSTableName 属性。

6. 总结

通过 SQLSugar 对 TDengine 超级表的支持,开发者可以更方便地操作 TDengine 数据库。本文介绍了如何使用 SQLSugar 创建超级表、查询子表、插入数据以及动态映射超级表名称。这些功能使得 SQLSugar 成为处理 TDengine 数据的强大工具,尤其适用于物联网、工业互联网等时序数据处理场景。

在实际开发中,开发者可以根据业务需求灵活运用这些功能,提升开发效率并优化数据库操作性能。