日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

LnskyDB是基于Dapper的Lambda擴展,支持按時間分庫分表,也可以自定義分庫分表方法

開源地址?https://github.com/liningit/LnskyDB

在此非常感謝SkyChenSky其中l(wèi)ambda表達(dá)式的解析參考了他的開源項目

下面是用ProductSaleByDayEntity作為示例,其中StatisticalDate為分庫分表字段,如果是對分庫分表對象進(jìn)行數(shù)據(jù)庫操作則必須傳入StatisticalDate或者設(shè)置DBModel_ShuffledTempDate指定是那個庫和表


1. 倉儲的創(chuàng)建

倉儲的創(chuàng)建有兩種方式一種是通過RepositoryFactory.Create<ProductSaleByDayEntity>()創(chuàng)建IRepository<ProductSaleByDayEntity>
還有一種是創(chuàng)建一個倉儲類繼承Repository<ProductSaleByDayEntity>

2. 查詢

2.1 根據(jù)主鍵查詢

var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
var entity = repository.Get(new ProductSaleByDayEntity
{
DBModel_ShuffledTempDate = new DateTime(2019, 01, 01),
SysNo = sysNo
});

2.2 根據(jù)where條件查詢

var stTime = new DateTime(2019, 1, 15);
var endTime = new DateTime(2019, 2, 11);
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
var query = QueryFactory.Create<ProductSaleByDayEntity>(m => m.ShopName.Contains("測試"));
query.And(m => m.StatisticalDate >= stTime);
query.And(m => m.StatisticalDate < endTime.Date.AddDays(1));
query.OrderByDescing(m => m.StatisticalDate);
query.StarSize = 20;
query.Rows = 10;

var lst = repository.GetList(query, stTime, endTime);

如果可以確定統(tǒng)計時間也可以查指定的庫表進(jìn)行單表查詢

var stTime = new DateTime(2019, 1, 15);
var endTime = new DateTime(2019, 1, 18);
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
var query = QueryFactory.Create<ProductSaleByDayEntity>(m => m.ShopName.Contains("測試"));
query.And(m => m.StatisticalDate >= stTime);
query.And(m => m.StatisticalDate < endTime.Date.AddDays(1));
query.DBModel.DBModel_ShuffledTempDate = new DateTime(2019, 01, 01);
query.OrderByDescing(m => m.StatisticalDate);
query.StarSize = 20;
query.Rows = 10;
var lst= repository.GetList(query);

2.3 分頁查詢

var stTime = new DateTime(2019, 1, 15);
var endTime = new DateTime(2019, 2, 11);
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
var query = QueryFactory.Create<ProductSaleByDayEntity>(m => m.ShopName.Contains("測試"));
query.And(m => m.StatisticalDate >= stTime);
query.And(m => m.StatisticalDate < endTime.Date.AddDays(1));
query.OrderByDescing(m => m.StatisticalDate);
query.StarSize = 20;
query.Rows = 10;

var paging = repository.GetPaging(query, stTime, endTime);
var count = paging.TotalCount;
var lst = paging.ToList();

如果可以確定統(tǒng)計時間也可以查指定的庫表

var stTime = new DateTime(2019, 1, 15);
var endTime = new DateTime(2019, 1, 18);
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
var query = QueryFactory.Create<ProductSaleByDayEntity>(m => m.ShopName.Contains("測試"));
query.And(m => m.StatisticalDate >= stTime);
query.And(m => m.StatisticalDate < endTime.Date.AddDays(1));
query.DBModel.DBModel_ShuffledTempDate = new DateTime(2019, 01, 01);
query.OrderByDescing(m => m.StatisticalDate);
query.StarSize = 20;
query.Rows = 10;
var paging= repository.GetPaging(query);
var count = paging.TotalCount;
var lst = paging.ToList();

3. 添加

var addEntity = new ProductSaleByDayEntity()
{
SysNo = Guid.NewGuid(),
DataSource = "測試來源",
ProductID = Guid.NewGuid(),
ShopID = Guid.NewGuid(),
ShopName = "測試店鋪",
ProductName = "測試商品",
OutProductID = Guid.NewGuid().ToString(),
ImportGroupId = Guid.NewGuid(),
StatisticalDate = DateTime.Now
};
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();

repository.Add(addEntity);

4. 更新

4.1 根據(jù)主鍵更新

var updateEntity = new ProductSaleByDayEntity()
{
SysNo = Guid.Parse("650BC09C-2B9C-467B-A457-8B4853CC1F0F"),
DataSource = "測試來源修改",
ShopName = "店鋪修改",
StatisticalDate = new DateTime(2019,01,05),


};
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();

return repository.Update(updateEntity);

4.2 根據(jù)where條件更新

var updateEntity = new ProductSaleByDayEntity()
{
DataSource = "測試來源修改",
ShopName = "店鋪修改Where",
DBModel_ShuffledTempDate = new DateTime(2019, 01, 05),

};
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
var where = QueryFactory.Create<ProductSaleByDayEntity>(m => m.ShopName == "測試店鋪1" && m.StatisticalDate > new DateTime(2019, 01, 03));

return repository.Update(updateEntity, where);

5. 刪除

5.1 根據(jù)主鍵刪除

var deleteEntity = new ProductSaleByDayEntity()
{
SysNo = Guid.Parse("650BC09C-2B9C-467B-A457-8B4853CC1F0F"),
DBModel_ShuffledTempDate = new DateTime(2019, 01, 05),
};
var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
return repository.Delete(deleteEntity);

5.2 根據(jù)where條件刪除

var repository = RepositoryFactory.Create<ProductSaleByDayEntity>();
var where = QueryFactory.Create<ProductSaleByDayEntity>();
where.DBModel.DBModel_ShuffledTempDate = new DateTime(2019, 01, 01);



where.QueryiSearch(m => m.DataSource, "新+更");
where.QueryiSearch(m => m.ShopName, "批量修改");

return repository.Delete(where);

6. 多線程處理

對于mvc每次請求都會在請求結(jié)束時將數(shù)據(jù)庫連接關(guān)閉,如果是新建線程則需要在線程開始調(diào)用DBTool.BeginThread();
并且在線程結(jié)束為止調(diào)用DBTool.CloseConnections();關(guān)閉連接

public class ThreadTool
{
public static void QueueUserWorkItem(Action action)
{
ThreadPool.QueueUserWorkItem(delegate
{
DBTool.BeginThread();
try
{
action();
}
finally
{
DBTool.CloseConnections();
}
});
}
}
ThreadTool.QueueUserWorkItem(ThreadDo);

7. 實體類T4自動生成

在LnskyDB.Demo\T4中有可以自動生成實體類的T4模版.
其中DbHelper.ttinclude中的Config是配置數(shù)據(jù)庫的
Entity.tt是生成實體的T4模版.大家可以根據(jù)自己的情況修改

原文地址:https://www.cnblogs.com/liningit/p/11015252.html

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

總結(jié)

以上是生活随笔為你收集整理的基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。