简介: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)的更多相关文章

  1. 轻量ORM-SqlRepoEx (十三)最佳实践

    ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...

  2. 软件设计师【软件工程:软件开发模型、XP极限编程十二最佳实践】

    一.软件开发模型 二.XP极限编程十二最佳实践

  3. 轻量ORM-SqlRepoEx (十)SqlRepoEx Nuget包下载说明

    ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...

  4. Dapper.NET——轻量ORM

    Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...

  5. SqlSugar轻量ORM

      蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...

  6. 采用轻量ServiceMesh实现灰度发布的实践

    软件总会有缺陷的,解决问题的同时往往会引入新的问题,关键是看这些问题是否在我们的控制范围内,“灰度发布”就是让问题受控的方法之一. 前言 我们的 CTO 经常说:“研发团队最首要的任务是提供稳定的服务 ...

  7. Dapper.NET—轻量ORM

    Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一 ...

  8. [转] Jenkins Pipeline插件十大最佳实践

    [From] http://blog.didispace.com/jenkins-pipeline-top-10-action/ Jenkins Pipeline 插件对于 Jenkins 用户来说可 ...

  9. 轻量ORM-SqlRepoEx (十四)最佳实践之Dapper(1)

    简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程 ...

随机推荐

  1. Luogu4887 第十四分块(前体)

    sto \(lxl\) orz 考虑莫队,每次移动端点,我们都要询问区间内和当前数字异或有 \(k\) 个 \(1\) 的数字个数 询问 \([l,r]\) 可以再次离线,拆成询问 \([1,l-1] ...

  2. css3 常用动画 随笔

    /* animation */.a-bounce,.a-flip,.a-flash,.a-shake,.a-swing,.a-wobble,.a-ring{-webkit-animation:1s e ...

  3. bootstrap 中的 iCheck 全选反选功能的实现

    喜欢bootstrap 风格的同学应该知道,iCheck的样式还是很好看的. 官网: http://www.bootcss.com/p/icheck/ 进入正题,iCheck提供了一些方法,可以进行全 ...

  4. sql按中文数字排序

    有表4张 建表和插入数据sql DECLARE @p_Building TABLE ( id INT , BidName ) ); DECLARE @p_Room TABLE ( id INT , R ...

  5. Server runtime

    spring mvc常用的注解: 个介绍. @Controller @Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为 类名称开头字母小写,你也可以自己指 ...

  6. CSS标准文档流 块级元素和行内元素

    标准文档流 什么是标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 空白折叠现象 ...

  7. 使用PowerShell批量注册DLL到GAC

    一段很小的代码,注册当前目录下所有的DLL到GAC,请先把gacutil.exe复制到同一个目录. $Path = Get-Location $Dir = Get-ChildItem "$P ...

  8. ZT android -- 蓝牙 bluetooth (二) 打开蓝牙

    android -- 蓝牙 bluetooth (二) 打开蓝牙 分类: Android的原生应用分析 2013-05-23 23:57 4773人阅读 评论(20) 收藏 举报 androidblu ...

  9. [EffectiveC++]item21:Don't try to return a reference when you must return an object

  10. Linux中配置ftp服务器

    1. 先用rpm -qa| grep vsftpd命令检查是否已经安装,如果ftp没有安装,使用yum  -y  install vsftpd 安装,(ubuntu 下使用apt-get instal ...