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

LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法

开源地址 https://github.com/liningit/LnskyDB

在此非常感谢SkyChenSky其中lambda表达式的解析参考了他的开源项目

下面是用ProductSaleByDayEntity作为示例,其中StatisticalDate为分库分表字段,如果是对分库分表对象进行数据库操作则必须传入StatisticalDate或者设置DBModel_ShuffledTempDate指定是那个库和表


1. 仓储的创建

仓储的创建有两种方式一种是通过RepositoryFactory.Create<ProductSaleByDayEntity>()创建IRepository<ProductSaleByDayEntity>
还有一种是创建一个仓储类继承Repository<ProductSaleByDayEntity>

2. 查询

2.1 根据主键查询

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

2.2 根据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);

如果可以确定统计时间也可以查指定的库表进行单表查询

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();

如果可以确定统计时间也可以查指定的库表

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 根据主键更新

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 根据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 根据主键删除

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 根据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每次请求都会在请求结束时将数据库连接关闭,如果是新建线程则需要在线程开始调用DBTool.BeginThread();
并且在线程结束为止调用DBTool.CloseConnections();关闭连接

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是配置数据库的
Entity.tt是生成实体的T4模版.大家可以根据自己的情况修改

640?wx_fmt=jpeg

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

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1297 [国家集训队]单选错位 期望

传送门 题意&#xff1a; 思路&#xff1a; 手推了一下没想到还真的能过。 对于相邻的两个数aia_iai​和ai1a_{i1}ai1​&#xff0c;分两种情况讨论&#xff1a; (1) ai<ai1a_i<a_{i1}ai​<ai1​ 时&#xff0c;答案在[1,ai][1,a_i][1,ai​]的范围内概率为aiai1\fra…

也读《人月神话》:没有银弹的软件工程

一、关于人月神话这本书记得在上大学的时候&#xff0c;就经常听学长和老师讲起《人月神话》&#xff0c;但是却一直没有阅读。记得当时一听到这个书名&#xff0c;还以为是个神马科幻类别的书&#xff0c;结果是个软件工程方面的书籍。这本书是“图灵奖得主、“IBM360系统之父…

P6154 游走 概率dp

传送门 题意&#xff1a; 思路&#xff1a; 给你个DAGDAGDAG&#xff0c;由于每一条路径出现概率相等&#xff0c;那么期望就是总长度路径个数\frac{总长度}{路径个数}路径个数总长度​。设f[i]f[i]f[i]表示到iii这个点的总长度&#xff0c;g[i]g[i]g[i]表示到iii这个点路径的…

[译]如何在C#中调试LINQ查询

LINQ是我在C#中最喜欢的功能之一。它让代码看起来更漂亮美观。我们得到了一个易于编写和理解的简洁函数式语法。好吧&#xff0c;至少我们可以使用LINQ方法的语法风格。LINQ很难进行调试。我们无法知道该查询内部发生了什么。我们可以看到输入和输出&#xff0c;但这就是它的全…

CodeForces - 375D Tree and Queries 树启 + 思维

传送门 题意&#xff1a; 思路&#xff1a; 很明显子树问题会想到树启&#xff0c;让后如何updateupdateupdate呢&#xff1f;一个显然的思路就是维护一个树状数组&#xff0c;查询次数>kj>k_j>kj​的个数。但是这样复杂度是O(nlog2n)O(nlog^2n)O(nlog2n)的&#xf…

WebSocket数据加密——AES与RSA混合加密

前言之前在写“一套简单的web即时通讯”&#xff0c;写到第三版的时候没什么思路&#xff0c;正好微信公众号看到一篇讲API交互加密&#xff0c;于是就自己搞了一套AES与RSA混合加密&#xff0c;无意中产生应用在WebSocket想法&#xff0c;好在思路都差不多&#xff0c;稍微改动…

基于 EntityFramework 生成 Repository 模式代码

借助 WeihanLi.EntityFramework 实现简单的 RepositoryIntro很多时候一些简单的业务都是简单的增删改查&#xff0c;动态生成一些代码完成基本的增删改查&#xff0c;而这些增删改查代码大多类似&#xff0c;只有一些有复杂业务逻辑的可能需要手动去写。于是实现了一个基于 EF …

P3168 [CQOI2015]任务查询系统 主席树 + 差分

传送门 题意&#xff1a; 思路&#xff1a; 题目中(si,ei,pi)(s_i,e_i,p_i)(si​,ei​,pi​)转换成操作即为在[si,ei][s_i,e_i][si​,ei​]区间内加上pip_ipi​的优先级&#xff0c;让后查询的话就是查询第xix_ixi​秒优先级最小的kik_iki​个任务的优先级之和。可知这两个操…

asp.net core 系列之Performance的 Response compression(响应压缩)

本文&#xff0c;帮助了解响应压缩的一些知识及用法(大部分翻译于官网,英文水平有限,不准确之处,欢迎指正)。什么是响应压缩&#xff1f;响应压缩简单的说就是为了减少网络带宽&#xff0c;而把返回的响应压缩&#xff0c;使之体积缩小&#xff0c;从而加快响应的一种技术(个人…

Codeforces Round #603 (Div. 2) E. Editor 线段树维护括号序列

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先一个括号序列合法的条件可以转化成两个(左括号代价为111&#xff0c;右括号代价为−1-1−1)&#xff1a; (1) 左括号个数等于右括号个数。 (2) 括号的前缀和非负。 所以我们直接用线段…

从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection

前言在阅读这篇文章&#xff1a;Announcing Net Core 3 Preview3的时候&#xff0c;我看到了这样一个特性&#xff1a;Docker and cgroup memory LimitsWe concluded that the primary fix is to set a GC heap maximum significantly lower than the overall memory limit as …

asp.net core使用serilog将日志推送到腾讯云日志服务

为什么是serilog&#xff1f;Serilog是 .NET 中最著名的结构化日志类库。基于日志事件log events&#xff0c;而不是日志消息log message。你可以将日志事件格式化为控制台的可读文本或者可以将相同的事件格式化为JSON并将其发送到远程日志服务器。应用程序中的日志语句会创建L…

P5787 二分图 /【模板】线段树分治

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 线段树分治就是在线段树上进行遍历&#xff0c;到每个点都加上它对子节点的贡献&#xff0c;最后到叶子节点的时候算一下贡献。 对于这个题先考虑维护二分图的话&#xff0c;可以用扩展域并…

微软发布 VS Code Java 安装程序,一键安装所有 Java 开发环境

北京时间 2019 年 6 月 14 日 &#xff0c;微软发布了 VS Code Java 安装程序&#xff0c;方便开发者能一键安装所有 Java 开发环境。几乎是在三年前&#xff0c;在微软苏黎世办公室的编程马拉松中&#xff0c;来自 Red Hat&#xff0c;IBM&#xff0c;Codenvy 和 Microsoft 的…

[译]C#中的条件断点

这只是你们许多人中可能使用的一个简单技巧。这是一个小但非常强大的技巧&#xff0c;在你调试大型代码库时尤其有用。这是条件断点的概念。正如名称本身所暗示的那样&#xff0c;只有在满足某个条件时才会设置被击中的断点。它也很容易实现。创建一个新的应用程序并设置一个普…

前菜---二叉树+堆的小练习

目录 前言&#x1f3dc;️ 1. 二叉树性质总结⛱️ 1.2 性质3⏰ 2. 二叉树性质小练习&#x1f3d5;️ 3. 答案解析&#x1f4a1; 4. 堆概念结构小练习&#x1fa94; 5. 答案解析&#x1f9ff; 6. 前/中/后/层序遍历小练习&#x1f52b; 7. 答案解析&#x1f9fa; 后语…

牛客 CCA的区间 dp + 补集转移

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先翻转一个区间意味着可以将任意两段不相交的区间组合&#xff0c;所以问题变成了选两端不相交的区间&#xff0c;使得合并后区间和最大。那么我们就处理出来区间&#xff0c;让后进行转…

ASP.NET Core IP 请求频率限制

在网站或API应用中&#xff0c;我们为了防止无聊人士或恶意攻击&#xff0c;通常希望屏蔽某一IP短时间的内高频率请求。在ASP.NET Core中&#xff0c;限制IP请求频率非常简单&#xff0c;我们来看看吧。轮子一个.NET Core 目前的生态发展十分迅猛&#xff0c;轮子也越来越多。只…

Exceptionless - .Net Core开源日志框架

作者&#xff1a;markjiang7m2原文地址&#xff1a;https://www.cnblogs.com/markjiang7m2/p/11020140.html官网地址&#xff1a;http://letyouknow.net今天要给大家介绍的Exceptionless是一个基于 .net core的开源日志框架&#xff0c;Exceptionless的意思是&#xff1a;没有异…

CF981E Addition on Segments 线段树分治 + bitset优化

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 我们考虑如果我们选择的区间都包含某个位置&#xff0c;那么这个位置一定是最大值。那么对于每个位置&#xff0c;我们枚举包含其的区间&#xff0c;让后每次加xxx都用bitsetbitsetbitset来…