Dapper扩展Dapper.Common框架 Linq To Sql 底层源码.net ORM框架
源代码:https://github.com/1448376744/Dapper.Common
NUGET: Dapper.Common
QQ群:642555086
一、基本结构,此处可用委托,或动态代理完成 class Program { //类加载时配置一次 static Program() { //配置数据源为mysql SessionFactory.DataSource = ()=>new MySqlConnection("server=127.0.0.1;user id=root;password=1024;database=test;"); //下划线不敏感,默认不区分大小写 SessionFactory.MatchNamesWithUnderscores = true; //Session使用静态代理,记录会话日志,生产模式设置false SessionFactory.SessionProxy = true; } static void Main(string[] args) { //变量声明 ISession session = null; try { //开启一次数据会话 session = SessionFactory.GetSession(); //开启事物,取消自动提交 session.Open(false); //事物操作1 //事物操作2 //事物操作3 //....... //提交事物 session.Commit(); } catch (Exception e) { //异常回滚 if (session!=null) { session.Rollback(); } throw e; } finally { //资源释放 if (session!=null) { session.Close(); } } } } 二、映射,此处可用自动模板完成 /// <summary> /// 对应表student,同名可以省略,字段名不分大小写,不分下划线 /// </summary> [Table("student")] public class Student { /// <summary> /// 对应字段ID,主键标识列identity=true /// </summary> [Column("ID", true)] public int? Id { get; set; } /// <summary> /// 对应字段ME_NAME,通过Column校正为Name, /// </summary> [Column("ME_NAME", false)] public string MeName { get; set; } /// <summary> /// 对应数据字段AGE无需校正 /// </summary> public int? Age { get; set; } /// <summary> /// 对应字段CREATE_TIME,不分大小写,下划线不敏感 /// </summary> [Column("CREATE_TIME", false)] public DateTime? CreateTime { get; set; } } 三、常用API var sesion = SessionFactory.GetSession(); /*****************INSERT*******************/ //Dapper var row1 = sesion.Execute("insert into student(Age,ME_NAME)values(@Age,@MeName)", new { Age = 20, MeName = "Dapper" }); //扩展 var row2 = sesion.From<Student>().Insert(new Student() { Name = "Dapper.Common", Age = 50, CreateTime = DateTime.Now }); var identity = sesion.From<Student>().InsertById(new Student() { Age = 20, Name = "Identity" }); //list var list = new List<Student>(); list.Add(new Student() { Name = "Dapper.Common", Age = 50, CreateTime = DateTime.Now }); var row3 = sesion.From<Student>().Insert(list); /*****************UPDATE*******************/ //根据主键修改全部列 var row4 = sesion.From<Student>().Update(new Student() { Id = 27, Name = "Update" }); //list var list2 = new List<Student>(); list2.Add(new Student() { Name = "Update List", Id = 27 }); list2.Add(new Student() { Name = "Update List", Id = 28 }); var row5 = sesion.From<Student>().Update(list2); //修改部分列+条件更新 var entity = new { Age = 20, Name = "admin" }; var row6 = sesion.From<Student>() //如果第一个条件为true,则更新MeName为entity.Name .Set(!string.IsNullOrEmpty(entity.Name), a => a.Name, entity.Name) //Age在原来的基础上加20 .Set(a => a.Age.Eq(a.Age + entity.Age)) //条件ID=30 .Where(a => a.Id == 30) //要执行的操作 .Update(); /*****************DELETE*******************/ //更据实体ID删除 var row7 = sesion.From<Student>().Delete(new Student() { Id = 30 }); //条件删除 var row8 = sesion.From<Student>() .Where(a => a.Age > 20) .Delete(); /*****************Select*******************/ //查询单个 var student = sesion.From<Student>().Single(); var list1 = sesion.From<Student>().Select(); //复杂查询 list = sesion.From<Student>() //查询条件 .Where(a => a.Age > 20 && a.Id.In(new int[] { 1, 2, 3 }.ToList())) //排序 .Desc(a => a.Id) //悲观锁 .XLock() //分页 .Limit(1, 10) //部分列 .Select(s => new { s.Name }); //分页查询,返回总记录数 var total = 10; list = sesion.From<Student>() .Skip(1, 5, out total) .Select(); /*****************动态查询*******************/ var query = new WhereQuery<Student>(); query .And(a => a.Name.Like("%aa%")) .Or(a => a.Id > 0) .Or(a => a.Id < 10) .Or(a => a.Id.In(new[] { 1, 2, 3 })) .And(a => 1 > 2 ? a.Name.Like("cc%") : a.Id > 100); var res = sesion.From<Student>().Where(query).Exists(); /*****************会话日志*******************/ var aa = sesion.Logger();
Dapper扩展Dapper.Common框架 Linq To Sql 底层源码.net ORM框架的更多相关文章
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
- [Abp vNext 源码分析] - 1. 框架启动流程分析
一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...
- Spring5源码解析-Spring框架中的单例和原型bean
Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...
- Ext.NET 4.1 系统框架的搭建(后台) 附源码
Ext.NET 4.1 系统框架的搭建(后台) 附源码 代码运行环境:.net 4.5 VS2013 (代码可直接编译运行) 预览图: 分析图: 上面系统的构建包括三块区域:North.West和C ...
- Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析
经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...
- JDK源码及其他框架源码解析随笔地址导航
置顶一篇文章,主要是整理一下写过的JDK中各个类的源码及其他框架源码解析的文章,方便自己随时阅读也方便网友朋友们阅读与指正 基础篇 从为什么String=String谈到StringBuilder和S ...
- Flask框架(五) —— session源码分析
Flask框架(五) —— session源码分析 目录 session源码分析 1.请求来了,执行__call__方法 2.__call__方法 3.调用__call__方法 3.1.ctx = s ...
- SQL学习笔记八之ORM框架SQLAlchemy
阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...
- SQLmap源码分析之框架初始化(一)
SQLmap是现在搞web人手一个的注入神器,不仅包含了主流数据库的SQL注入检测,而且包含提权以及后渗透模块.基于python2.x开发而成,使用方便.所以研究web安全少不了分析源码,学习代码的同 ...
随机推荐
- AMF_OBJECT 数据结构浅析
组织的比较散,主要是标记一下有关 AMF_OBJECT 数据组织结构.其标识嵌套结束则为 0x 00 00 09 原始数据结构已知: key=“0123456”: Value 的值是一个结构体如下: ...
- Asp.Net 自定义 httpmodel 中间件 管道
https://msdn.microsoft.com/en-us/library/aa719858(v=vs.71).aspx http://www.cnblogs.com/jimmyzhang/ar ...
- Angularjs Ng_repeat中实现复选框选中并显示不同的样式
最近做了一个选择标签的功能,把一些标签展示给用户,用户选择自己喜欢的标签,就类似我们在购物网站看到的那种过滤标签似的: 简单的效果如图所示: 首先看一下html代码: 1 <!DOCTYPE h ...
- nexus3 搭建maven远程仓库
右上角 下载maven http://maven.apache.org/download.cgi 下载nexus https://www.sonatype.com/download-oss-sonat ...
- 编译boost.log模块遇到的一些问题
线上日志用到的是日志库,在全局有一个锁,导致在高并发的时候,容易因为锁竞争问题导致时延.在某些情况下,会因为同一个用户,同时访问某个变量,导致读写冲突使线上服务整体core掉(考虑到请求的间隔,为了应 ...
- linux磁 盘分区 挂载
f命令查看磁盘的分区和已经使用量 利用du命令查询当前目录下的所有目录/文件所占的容量 dumpe2fs查看分区的具体使用情况 磁盘的分区–命令fdisk fdisk /dev/sda 进入这个设备m ...
- 微信公众号token 验证
1. 首先给出测试项目的整体目录: 2. CoreServlet类: 当get请求的时候会执行get方法,post请求的时候会执行post方法,分别来处理不同的请求 package com.zjn.s ...
- java算法 第七届 蓝桥杯B组(题+答案) 10.压缩变换
10.压缩变换 (程序设计) 小明最近在研究压缩算法.他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比.然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些 ...
- linux shell脚本编程笔记(二): 分支结构
1.if if command then commands fi if command then commands else commands fi if command1 then command ...
- chrome crx插件存档
https://github.com/mdamien/chrome-extensions-archive