欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

轻量ORM-SqlRepoEx 重大升级

程序员文章站 2022-08-09 09:42:08
.Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,支持MySQL、SQL Server数据库方言,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵活的Lambda表达式组合,实现业务数据查询的多样性。 ......

 .net平台下兼容.net standard 2.0,一个实现以lambda表达式转转换标准sql语句,支持mysql、sql server数据库方言,使用强类型操作数据的轻量级orm工具,在减少魔法字串同时,通过灵活的lambda表达式组合,实现业务数据查询的多样性。

 

演示代码:https://github.com/azthinker/sqlrepoex2.0demo

 

轻量ORM-SqlRepoEx 重大升级

一、sqlrepoex升级为2.0,此次升级主要变更为

1、重新组织代码结构,以支持sql方言;

2、增加对mysql数据访问支持;

3、增加通过dapper进行数据访问支持;

只需几步,即可实现sqlrepoex与

(1)、数据库连接设置

string connectionstring = "data source=(local);initial catalog=northwind;user id=test;password=test";

            var connectionprovider = new mssqlp.connectionstringconnectionprovider(connectionstring);

            mssqlrepofactory.useconnectionprovider(connectionprovider);

(2)、注册dapper解释器

mssqlrepofactory.usestatementexecutor(new dapperstatementexecutor(connectionprovider));

mssqlrepofactory.usedatareaderentitymapper(new dapperentitymapper());

(3)、标准sqlrepoex数据访问

            var repository = mssqlrepofactory.create<customers>();

            var result = repository.query().select(e => e.customerid, e => e.companyname, e => e.address).top(10);

(4)、在lambda表达式转转上,支持复杂lambda语法解析;

sqlrepoex1.1的where语句只支持单一表达式: where(c => c.id == 9),如果使用 where(c => c.id == 9 && c.id == 10 ),则会报错;

sqlrepoex2.0可以使用:where(c => c.id > 0 && c.id < 30 && c.remark.contains("a"))的更自然的语法;

(5)、增加对union操作支持

sqlrepoex1.1不支持union操作;

在sqlrepoex2.0中可以

轻量ORM-SqlRepoEx 重大升级
 1 var repository = mssqlrepofactory.create<todo>();
 2     var results = repository.query().select(e => e.id, e => e.task);
 3     var results5 = repository.query().select(e => e.id, e => e.task)
 4           .where(c => c.id > 0 && c.id < 7);
 5     var results6 = repository.query()
 6            .select(e => e.id, e => e.task)
 7           .where(c => c.id > 10 && c.id < 15);
 8     var results2 = results.union(new list<unionsql> {
 9          unionsql.new(  results5,uniontype.union ),
10          unionsql.new(  results6,uniontype.union )  });
11     foreach (var item in results2)
12     {
13     console.writeline($"{item.id}\t {item.task} ");
14     }
view code

 

(6)、增强join语法

var repository = mssqlrepofactory.create<todo>();

var results1 = repository.query()

.innerjoin<taskremark>()

// 增加附加条件,如果主选择有此属性,则查询本句中所设置

.on<taskremark>((r, l) => r.task == l.task, l => l.remark);

console.writeline(results1.sql());

 

二、可通过nuget获得

(一)、ms sql sqlserver

1、使用 autofac 时

install-package sqlrepoex.mssql.autofac -version 2.0.1

2、asp.net core

install-package sqlrepoex.mssql.servicecollection -version 2.0.1

3、手动实例时

install-package sqlrepoex.mssql.static -version 2.0.1

(二)、mysql

1、使用 autofac 时

install-package sqlrepoex.mysql.autofac -version 2.0.1

2、asp.net core

install-package sqlrepoex.mysql.servicecollection -version 2.0.1

3、手动实例时

install-package sqlrepoex.mysql.static -version 2.0.1

(三)、支持dapper

install-package sqlrepoex.adapter.dapper -version 1.0.1

(四)、通用sql

install-package sqlrepoex.normal -version 2.0.1

(五)、案例源码

https://github.com/azthinker/sqlrepoex2.0demo

如使用中有任何问题,请告知

1、通过评论;

2、可通过电邮 azthinker@sina.com;

3、有兴趣的请在qq群中参与讨论、联系作者  qq群名称:atk高效开发 ,qq群号:747049962