基於Dapper的開源Lambda擴展,且支持分庫分表自動生成實體之基礎介紹

LnskyDB GitHub stars GitHub forks

LnskyDB是基於Dapper的Lambda擴展,支持按時間分庫分表,也能夠自定義分庫分表方法.並且能夠T4生成實體類免去手寫實體類的煩惱.git

文檔地址: https://liningit.github.io/LnskyDB/github

開源地址: https://github.com/liningit/LnskyDBsql

nuget地址: https://www.nuget.org/packages/LnskyDB/
前面咱們介紹了LnskyDB的增刪改查操做,接下來咱們結束幾個基礎類.倉儲及實體類還有T4如何生成實體數據庫

倉儲

倉儲的獲取有兩種方式一種是調用RepositoryFactory.Create<T>()方法建立,還有一種是建立倉儲類繼承Repository<T>.若是須要接口也能夠建立接口繼承IRepository<T>.
倉儲中的CommandTimeout能夠設置查詢超時時間json

實體類

建立實體類需繼承BaseDBModel,而且實現裏面的抽象方法app

1.主鍵配置

GetDBModel_PKCols()返回表的主鍵名稱,必須. 示例:ide

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}.示例:code

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; }

錯誤日誌

DBTool.Error事件,當執行sql發生異常會觸發DBTool.Error事件

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'是生成實體,倉儲及倉儲接口的實際代碼.你們能夠根據本身項目的實際狀況修改

相關文章
相關標籤/搜索