当前位置: 移动技术网 > IT编程>开发语言>.net > 轻量ORM-SqlRepoEx (十六)最佳实践之Dapper(2)

轻量ORM-SqlRepoEx (十六)最佳实践之Dapper(2)

2018年10月26日  | 移动技术网IT编程  | 我要评论

关键在于落实心得体会,100c手机,注册造价师挂靠

简介: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等特性,为异构提供了简易的操作;

 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网