轻量ORM-SqlRepoEx (十六)最佳实践之Dapper(2)
简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM。解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程序员来说,是非常简单的,其语法特点与Linq to Sql极为相似。不仅实现了完整的Select、Insert、Update、Delete等语句解析器,同时,也实现了Select、where、order by等子句,这些语句与子句均支持导出SQL语句,使得拼接复杂场景SQL语句变得轻松,SqlRepoEx很快其原生数据访问与Dapper不相上下,SqlRepoEx本身支持Sql Server与MySql方言,同时通过SqlRepoEx.Normal支持非方言SQL。SqlRepoEx没侵入性,仅通过简单的几个特性,就能让类与数据库关联起来;
*本系列以静态工厂为例;
*数据来源于Northwind数据库;
*完整的代码见 https://github.com/AzThinker/SqlRepoEx2.0StartGuid https://gitee.com/azthinker/SqlRepoEx2.0StartGuid
五、@ 参数构建
1、对于类属性 ,SqlRepoEx 为IInsertStatement,IUpdateStatement提供了 ParamSql()方法和 ParamSqlWithEntity()方法
(1)、 ParamSql(),是一个简单返回参数语句的方法
var repository = MsSqlRepoFactory.Create<AzProducts>();
var resultUpdate = repository
.Update()
// 注意此处的 ParamSet 方法,此时不需要指定属性的值
// 这为构建完全的 @ 参数 提供了方便
// 特别是在批更新时,最为方便
.ParamSet(p => p.ProductName2, p => p.CategoryID)
.Where(p => p.ProductID == p.ProductID);
Console.WriteLine(resultUpdate.ParamSql());
此句会生成
UPDATE [dbo].[Products]
SET ProductName = @ProductName2, CategoryID = @CategoryID
WHERE (([dbo].[Products].[ProductID] = @ProductID));
// 使用 Dapper 更新
AzProducts products = new AzProducts() { ProductID = 84, ProductName2 = "testvalue100", CategoryID = 7 };
// Dapper 更新
int result = dbConnection.Execute(resultUpdate.ParamSql(), products);
(2) ParamSqlWithEntity()方法,一个返Tupe (string paramsql, TEntity entity)
var repository = MsSqlRepoFactory.Create<AzProducts>();
var resultUpdate = repository
.Update()
// 此处使用 Set 方法,并将属值指定
.Set(p => p.ProductName2, "testvalue234")
.Set(p => p.CategoryID, 5)
.Where(p => p.ProductID == 84);
var ret = resultUpdate.ParamSqlWithEntity();
Console.WriteLine(ret.paramsql);
此句会生成
UPDATE [dbo].[Products]
SET ProductName = @ProductName2, CategoryID = @CategoryID
WHERE (([dbo].[Products].[ProductID] = 84));
同时 Set 方法中的属值会生在一个 AzProducts 类实例,这样为使用 Dapper提供了方便
int result = dbConnection.Execute(ret.paramsql, ret.entity);
2、对于条件语句的 @ 参数
条件语句中,只需要使用
形如:.Where(p => p.ProductID == p.ProductID); 即可产生 WHERE (([dbo].[Products].[ProductID] = @ProductID));
参见上例 1 (1)
总结:
1、对于与Dapper结合使用,SqlRepoEx提供了两种方式,一种是使用 SqlRepoEx.Adapter.Dapper ,采用与其他SqlRepoEx的操作一至的方式来访问数据;二是,采用《最佳实践之Dapper》中的方式,以SQL语句结合Dapper来操作;两种方式可同时并存,不影响使用,具体采用哪形式,由编程人员自行决定。
2、 SqlRepoEx提供了以Lamdba的方式 ,其操作类似于Linq的操作,但更接近于Sql本身的语义顺序
3、参数字段的构建非常方便,减少拼接语句容易出错问题,同时使用 Table,Column等特性,为异构提供了简易的操作;
轻量ORM-SqlRepoEx (十六)最佳实践之Dapper(2)的更多相关文章
- 轻量ORM-SqlRepoEx (十三)最佳实践
ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...
- 软件设计师【软件工程:软件开发模型、XP极限编程十二最佳实践】
一.软件开发模型 二.XP极限编程十二最佳实践
- 轻量ORM-SqlRepoEx (十)SqlRepoEx Nuget包下载说明
ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...
- Dapper.NET——轻量ORM
Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...
- SqlSugar轻量ORM
蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...
- 采用轻量ServiceMesh实现灰度发布的实践
软件总会有缺陷的,解决问题的同时往往会引入新的问题,关键是看这些问题是否在我们的控制范围内,“灰度发布”就是让问题受控的方法之一. 前言 我们的 CTO 经常说:“研发团队最首要的任务是提供稳定的服务 ...
- Dapper.NET—轻量ORM
Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1 一 ...
- [转] Jenkins Pipeline插件十大最佳实践
[From] http://blog.didispace.com/jenkins-pipeline-top-10-action/ Jenkins Pipeline 插件对于 Jenkins 用户来说可 ...
- 轻量ORM-SqlRepoEx (十四)最佳实践之Dapper(1)
简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程 ...
随机推荐
- bootstrap学习笔记(网页开发小知识)
这是我在学习Boostrap网页开发时遇到的主要知识点: 1.导航条navbar 添加.navbar-fixed-top类可以让导航条固定在顶部,固定的导航条会遮住页面上的其他内容,除非给<bo ...
- WebService程序数据集之WSDL取数
在通用的webservice集合中,在集合中使用wsdl取数的方式获取数据,并将数据转换为程序数据集,那么怎样通过wsdl取数并转换为程序数据集呢? 首先将wsdl获取到的数据数据转换为二维数组,然后 ...
- VS2013中使用Git建立源代码管理
原文:http://blog.csdn.net/bodybo/article/details/38976549/ 第一次在VS2013中使用Git,也是第一次使用git,各种不熟悉.百度各种使用经验, ...
- Android开发如何定制framework层服务
刚刚跨完年,新年第一篇文章,那么今天将对Android开发framework中间层的服务定制使用作个总结.首先我们先导入Android平台源码framework层的代码到开发工具eclipse中,代码 ...
- win10命令控制符
IP:ipconfigIP地址侦测器:Nslookup显卡:dxdiag控制面板:control电话拨号:dialer木马捆绑工具,系统自带:iexpress本地用户和组:lusrmgr.msc鼠标属 ...
- IEC62304软件维护框架
软件维护计划的任务 建立接收.记录.评估.解决和追踪医疗器械软件发行后的反馈 制定确认反馈是否是问题的标准 使用风险管理过程 使用配置管理过程 制定升级.补丁以及遗留问题修正计划 问题和修改分析的任务 ...
- Redis(二):c#连接Redis
1.nuget StackExchange.Redis 2.建立RedisHelper类: public class RedisHelper { /// <summary> /// 连接字 ...
- Oracle11g服务详细介绍及哪些服务是必须开启的
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/DaisyLoveZly/article/details/79463713 七个服务的含义分别为:1. ...
- Python 爬虫练手项目—酒店信息爬取
from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...
- ASP.NET中的身份验证有那些?你当前项目采用什么方式验证请解释
ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). l Windows身份验证—常结合应用程序自定义身份验证使用使用这种身份验证模式时,AS ...