SqlSugar 是 .net中最早支持TDengine最成熟的的ORM框架,大量用户投入生产
1.支持使用原生(非HTTP连接)连高性能
2.并且支持微秒和纳秒
3.支持根据Tag自动创建子表
4.支持的类型齐全
SqlSugar.TDengineCore 4.18.6+
SqlSugarCore 5.1.4.187+
不需要加 typeof(CommonPropertyConvert)
//程序启动时加入(这个只要执行一次)
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()
{
//最新版本不需 typeof(CommonPropertyConvert)
//升级到:SqlSugar.TDengineCore 4.18.6+ SqlSugarCore 5.1.4.187+
}
});变更说明:给所有列加上通用转换,在EntityService中加
Host=localhost;Port=6030;Username=root;Password=taosdata;Database=power //默认是毫秒,要微秒等看下面有介绍
//程序启动时加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(TDengineProvider).Assembly };
var db = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.TDengine,
ConnectionString = Config.ConnectionString,
IsAutoCloseConnection = true, //2个DLL升级到最新老版本需要加
});//程序启动时加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(TDengineProvider).Assembly };
var db= new SqlSugarClient(new ConnectionConfig(){
DbType = SqlSugar.DbType.PostgreSQL,
ConnectionString = Config.ConnectionString,
IsAutoCloseConnection = true,
MoreSettings= new ConnMoreSettings()
{
PgSqlIsAutoToLower = false,//增删查改支持驼峰表
PgSqlIsAutoToLowerCodeFirst = false, // 建表建驼峰表。5.1.3.30
}}
)当前程序需要安装Sdk才能连接数据库
TDengine-server 服务端 (数据库服务器安装)
TDengine-client 客户端 (程序服务器安装)
Client版本不能小于Server的版本 (最好一样)
https://docs.taosdata.com/releases/tdengine/#!
下面是NUGET安装
SqlSugar.TDengineCore SqlSugarCore
//程序启动时加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(TDengineProvider).Assembly };
//db对象
SqlSugarClient Db= new SqlSugarClient(new ConnectionConfig(){
ConnectionString = "连接符字串",
DbType = DbType.TDengine,
IsAutoCloseConnection = true});新支持请升级:SqlSugar.TDengineCore 2.1+
//手动赋值
[SugarColumn(IsPrimaryKey = true)]
public DateTime ts { get; set; }
//数据库默认值(推荐)
[SugarColumn(IsPrimaryKey =true,InsertServerTime =true)]
//ORM 默认字符串建毫秒库
db.DbMaintenance.CreateDatabase();注意:连接字符串加上 TsType=config_us 不然条件过滤不了
//连接字符串加上 TsType=config_us
[SugarColumn(IsPrimaryKey = true,SqlParameterDbType =typeof(DateTime16))]
public DateTime ts { get; set; }
//ORM 建库方法创建库 字符串加上 TsType=config_us 可以创建微秒库
db.DbMaintenance.CreateDatabase();注意:连接字符串加上 TsType=config_ns 不然条件过滤不了
//TsType=config_ns
[SugarColumn(IsPrimaryKey = true,SqlParameterDbType =typeof(DateTime19))]
public DateTime ts { get; set; }
//ORM 建库方法创建库 字符串加上 TsType=config_ns 可以创建纳秒库
db.DbMaintenance.CreateDatabase(); //建库
db.Ado.ExecuteCommand("CREATE DATABASE IF NOT EXISTS power WAL_RETENTION_PERIOD 3600");
//建超级表
db.Ado.ExecuteCommand("CREATE STABLE IF NOT EXISTS MyTable (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (location BINARY(64), groupId INT)");
//创建子表
db.Ado.ExecuteCommand(@"create table IF NOT EXISTS MyTable01 using MyTable tags('California.SanFrancisco',1)");
//insert sql
//db.Ado.ExecuteCommand(insrtSql);
//查询子表
var dt = db.Ado.GetDataTable("select * from MyTable01");
//查询超级表
var dt2 = db.Ado.GetDataTable("select * from MyTable");var list2 = db.Queryable<MyTable02>().Where(it => it.name == "测试2").ToList(); var list22 = db.Queryable<MyTable02>().Where(it => it.voltage == 222).ToList(); var list222 = db.Queryable<MyTable02>().Where(it => it.phase == 1.2).ToList(); var list2222 = db.Queryable<MyTable02>().Where(it => it.isdelete == true).ToList();
//联表查询:不支持left join只能这样
var list101= db.Queryable<MyTable02, MyTable02>((x, y) => x.ts == y.ts)
.Select((x,y) => new
{
xts=x.ts,
yts=y.ts
}).ToList(); //模糊查询
var list3 = db.Queryable<MyTable02>().Where(it => it.name.Contains("a")).ToList();
//时间差函数
var list31 = db.Queryable<MyTable02>().Select(it =>
new
{
diff = SqlFunc.DateDiff(DateType.Day, it.ts, DateTime.Now),
time=it.ts
}).ToList();
//时间加1天
var list32 = db.Queryable<MyTable02>().Select(it =>
new
{
addTime = SqlFunc.DateAdd(it.ts,1, DateType.Day),
oldime = it.ts
}).ToList();
//自定义函数:实现时间加1天
var list33 = db.Queryable<MyTable02>().Select(it =>
new
{
addTime =SqlFunc.MappingColumn<DateTime>(" `ts`+1d "),
oldime = it.ts
}).ToList(); //小数据批量插入子表
db.Insertable(list).ExecuteCommand();
db.Insertable(list).AS(表名).ExecuteCommand();
//大数据批量插入子表(最新版本支持)
db.Fastest<MyTable02>().BulkCopy(list);
db.Fastest<MyTable02>().AS(表名).BulkCopy(list);
//子表实体
public class MyTable02
{
[SugarColumn(IsPrimaryKey =true)]
public DateTime ts { get; set; }
public string name { get; set; }
public float phase { get; set; }
[SugarColumn(IsOnlyIgnoreInsert =true,IsOnlyIgnoreUpdate =true)]//Tags字段禁止插入
public string location { get; set; }
[SugarColumn(IsOnlyIgnoreInsert = true, IsOnlyIgnoreUpdate = true)]//Tags字段禁止插入
public int groupId { get; set; }
}Insertable 看标题16.2 ( 适合少量子表和数据 )
BulkCopy 看标题16.3 (适合一次建很多子表,一次插入很多数据 )
创建表以子表为准(超级表名字是固定的前缀+表名) CRUD也是子表为准
db.CodeFirst.InitTables<CodeFirst03>();//建表
db.Insertable(new CodeFirst03()
{
Ts = DateTime.Now,
Boolean = true,
Char = 'a'
}).ExecuteCommand();
var list3 = db.Queryable<CodeFirst03>().ToList();
public class CodeFirst03 : STable //需要继承 STable
{
[SqlSugar.SugarColumn(IsPrimaryKey = true)]
public DateTime Ts { get; set; }
public bool Boolean { get; set; }
public byte Byte { get; set; }
public sbyte SByte { get; set; }
public char Char { get; set; }
}注意需要继承:STable
SqlSugar.TDengineCore 4.18.3+
SqlSugraCore 5.1.4.179
//创建超级表扔在程序初始话的地方
db.CodeFirst.InitTables<SUsingTagModel>();
//查询所有
var list1 = db.Queryable<SUsingTagModel>().AsTDengineSTable().ToList();
//查询子表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();
//插入并根据Tag的值创建子表
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(); //内部有分页对性能优化过了
[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; }
}
//用动态超级表可以将表名也动态
db.MappingSTableName<SUsingTagModel>("newSName001");
//db.MappingSTableName写在前面才会生效
//替换特性中的 STableName = "SUsingTagModel"
//特性中STableNameb也需要一个唯一的默认值 public static void BulkCopy(ISqlSugarClient db)
{
//建表超级表(扔在程序启动时)
db.CodeFirst.InitTables<BulkDemo2>();
//设置子表格式和Tag字段
TDengineFastBuilder.SetTags(db, (tag,stable) => $"{stable}_{tag}", "Tag1");
//根据设置的Tag写入数据库
db.Fastest<BulkDemo2>().BulkCopy(new List<BulkDemo2>(){
new BulkDemo2()
{
Boolean = true,
Tag1 = "a",
//没启用微秒纳秒时间不能一样
Ts = DateTime.Now.AddMilliseconds(1)
}
});
//查询
var list= db.Queryable<BulkDemo2>().ToList();
}
[STableAttribute(STableName = "BulkDemo2", Tag1 = nameof(Tag1))]
public class BulkDemo2
{
[SqlSugar.SugarColumn(IsPrimaryKey = true)]
public DateTime Ts { get; set; }
public bool Boolean { get; set; }
public string Tag1 { get; set; }
}找到TDengineTests文件夹
https://github.com/DotNetNext/SqlSugar

升级:5.1.4.114-preview+
//程序启动时加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(TDengineProvider).Assembly };2016 © donet5.comApache Licence 2.0