欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍

程序员文章站 2022-03-19 23:27:44
LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. ......

lnskydb 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍

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'是用来编写生成配置的

  1. connectionstring表示连接字符串
  2. database是表示数据库实际名称
  3. databasename是表示存储在'appsettings.json'中的名称
  4. tablenames表示要生成那些表表示全部name_表示前缀是name_的
  5. excludetablename表示要排除那些表
  6. shuffledconfigs表示分库分表配置存储表名,shuffledconfig的键值对形式
  7. shuffledconfig分库分表具体配置shuffleddata根据那一列分库分表,minshuffledtempdate表示最小值

'entity.tt'是生成实体,仓储及仓储接口的实际代码.大家可以根据自己项目的实际情况修改