基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍
lnskydb
lnskydb是基于dapper的lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以t4生成实体类免去手写实体类的烦恼.
文档地址: https://liningit.github.io/lnskydb/
开源地址: https://github.com/liningit/lnskydb
nuget地址: https://www.nuget.org/packages/lnskydb/
前面我们介绍了lnskydb的增删改查操作,接下来我们结束几个基础类.仓储及实体类还有t4如何生成实体
仓储
仓储的获取有两种方式一种是调用repositoryfactory.create<t>()
方法创建,还有一种是创建仓储类继承repository<t>
.如果需要接口也可以创建接口继承irepository<t>
.
仓储中的commandtimeout
可以设置查询超时时间
实体类
创建实体类需继承basedbmodel
,并且实现里面的抽象方法
1.主键配置
getdbmodel_pkcols()
返回表的主键名称,必须. 示例:
private static immutablelist<string> _dbmodel_pkcols = immutablelist.create("sysno"); public override immutablelist<string> getdbmodel_pkcols() => _dbmodel_pkcols;
2.自增列配置
getdbmodel_incrementcol();
setincrementvalue(int value)
返回表的自增列,以及设置自增列值,如有自增列则必须. 示例:
public override string getdbmodel_incrementcol() => "id"; public override void setincrementvalue(int value) { id = value; }
3.库名表名配置
getdbmodel_tablename()
getdbmodel_dbname()
返回表名及库名,必须.如果是分库分表则后面待{0}.示例:
public override string getdbmodel_tablename() => "purify_productsalebyday{0}"; public override string getdbmodel_dbname() => "lnsky{0}";
4.分库分表配置
getshuffledmodel()setshuffleddata(object obj)
返回分库分表对象,及实现设置分库分表值.示例:
public override shuffledmodel getshuffledmodel() { if (dbmodel_shuffledtempdate == datetime.minvalue) { throw new noshuffledexception(getdbmodel_tablename(), "分库分表时间,shuffledtempdate"); } return shuffledbydbtable(dbmodel_shuffledtempdate); } datetime _dbmodel_shuffledtempdate; [jsonignore] public datetime dbmodel_shuffledtempdate { get { return statisticaldate != datetime.minvalue ? statisticaldate : _dbmodel_shuffledtempdate; } set { _dbmodel_shuffledtempdate = value; } } public override void setshuffleddata(object obj) { dbmodel_shuffledtempdate = (datetime)obj; }
t4模版生成
项目'lnskydb.demo'中的t4目录下有t4自动生成实体类的代码.大家可以根据自己的实际情况进行修改配置
'dbhelper.ttinclude'中的'config.dbconfigs'是用来编写生成配置的
- connectionstring表示连接字符串
- database是表示数据库实际名称
- databasename是表示存储在'appsettings.json'中的名称
- tablenames表示要生成那些表表示全部name_表示前缀是name_的
- excludetablename表示要排除那些表
- shuffledconfigs表示分库分表配置存储表名,shuffledconfig的键值对形式
- shuffledconfig分库分表具体配置shuffleddata根据那一列分库分表,minshuffledtempdate表示最小值
'entity.tt'是生成实体,仓储及仓储接口的实际代码.大家可以根据自己项目的实际情况修改