当前位置: 移动技术网 > IT编程>开发语言>.net > 轻量ORM-SqlRepoEx (十二)SqlRepoEx 2.0.1 至 2.2.0 版本更新说明

轻量ORM-SqlRepoEx (十二)SqlRepoEx 2.0.1 至 2.2.0 版本更新说明

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

湖南卫视直播天天向上,王思聪40亿,谢宇风

一、功能变化

(一)、强化特性支持

1、部分类型拥有复杂属性;

2、有些属性不是来源于数据库

3、用户在原来的代码中使用 sqlrepoex ,减少字段与数据库字段之间的冲突;

4、为支持新的特性及优化属性读写,增加了 simplewritablepropertymatcher;

5、增加sqlrepodbfieldattribute特性后,如果用户程序仍然为pojo类型,不必标识sqlrepodbfieldattribute时,用simplewritablepropertymatcher

6、如果明确要区分,就用writablepropertymatcher ;

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

          var connectionprovider = new connectionstringconnectionprovider(connectionstring);

           mssqlrepofactory.useconnectionprovider(connectionprovider);

   // 使用新的属性读写器

           mssqlrepofactory.usewritablepropertymatcher(new simplewritablepropertymatcher());

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

 类型代码(使用明确特定  使用 writablepropertymatcher )

 1     public class todo
 2     {
 3         [nondatabasefield]
 4         public string remark { get; set; }
 5 
 6         [sqlrepodbfield]
 7         public datetime createddate { get; set; }
 8 
 9         [sqlrepodbfield]
10         public bool iscompleted { get; set; }
11 
12         [sqlrepodbfield]
13         public string task { get; set; }
14 
15         [identityfield]
16         public int id { get; set; }
17     }
view code

 

 类型代码(不指定 使用 simplewritablepropertymatcher)

 1     public class todo
 2     {
 3         [nondatabasefield]
 4         public string remark { get; set; }
 5         public datetime createddate { get; set; }
 6         public bool iscompleted { get; set; }
 7         public string task { get; set; }
 8 
 9         [identityfield]
10         public int id { get; set; }
11     }
view code

 

(二)事务支持

 1、在初始仓储时如果使用

mssqlrepofactory.usestatementtransactionexecutor();

2、代码中使用使用方法 repository.getconnectionprovider.begintransaction() 获取事务控制

 1 public void doit2()
 2         {
 3             var repository = mysqlrepofactory.create<todo>();
 4             using (var tranc = repository.getconnectionprovider.begintransaction())
 5             {
 6                 repository.update().set(c => c.task, "a31").where(c => c.id == 1).go();// a1
 7                 repository.update().set(c => c.task, "b31").where(c => c.id == 2).go();// b2
 8 
 9                 tranc.rollback();
10             }
11          }
view code

 

(三)、增加生成  @ 参数 的语句支持

返回形如下列sql语句:

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

var results = repository.query().where(c => c.id == 6).go().firstordefault();

console.writeline(resultinsert.paramsql());

1、 insert  todo ( createddate , iscompleted , task )

values(@createddate,@iscompleted,@task);

var resultinsert = repository.update().for(results);

 console.writeline(resultinsert.paramsql());

2、 update   todo

set createddate  = @createddate, iscompleted  = @iscompleted, task  = @task

where id  = @id;

以解决储如dapper等orm工具需要参数类型字符串需求

sqlrepoex中是可以与 dapper 同时并存,意味着初始化sqlrepoex后,

1、可以直接从 sqlrepoex 中操作返回结果;

2、可以通过 sqlrepoex 来生成sql语句,另外dapper 主要是基于sqlmapper ,sqlmapper中定义了基于 idbconnection 接口的操作,你可以通过sqlrepoex 的 iconnectionprovider 接口来获取一个 dbconnection 有两种方法

     (1)、 var connectionprovider = new appconfigfirstconnectionprovider();

           idbconnection dbconnection = connectionprovider.getdbconnection;

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

          idbconnection dbconnection = repository.getconnectionprovider.getdbconnection;

 1         public static void testmysqlupdate()
 2         {
 3             string connectionstring = "datasource=127.0.0.1;username=test;password=test;database=sqlrepotest;charset=gb2312;sslmode = none;";
 4             var connectionprovider = new mysqlp.connectionstringconnectionprovider(connectionstring);
 5             mysqlrepofactory.useconnectionprovider(connectionprovider);
 6             mysqlrepofactory.usestatementexecutor(new dapperstatementexecutor(connectionprovider));
 7             mysqlrepofactory.usedatareaderentitymapper(new dapperentitymapper());
 8             mysqlrepofactory.usewritablepropertymatcher(new simplewritablepropertymatcher());
 9             var repository11 = mysqlrepofactory.create<todo>();
10             var results11 = repository11.query().where(c => c.id == 2).go().firstordefault();
11 
12             results11.task = "b21";
13 
14             var rest2=   repository11.update().for(results11);
15 
16             console.writeline(rest2.paramsql());
17 
18             var rest3 = rest2.paramsqlwithentity();
19 
20             idbconnection dbconnection = repository11.getconnectionprovider.getdbconnection;
21 
22             dbconnection.execute(rest3.paramsql, rest3.entity);
23         }
view code

 

二、注意事项

1、如果返回的sql中没有字段名返回,如  insert doto() values()  ,这种情况,当前使用了writablepropertymatcher 属性读写器,而dto类又未设置特性

 你可以

 (1)、增加相应字段特性

1         [sqlrepodbfield]
2         public string task { get; set; }
3 
4         [identityfield]
5         public int id { get; set; }

 

 (2)、使用 simplewritablepropertymatcher属性读写器

        mssqlrepofactory.usewritablepropertymatcher(new simplewritablepropertymatcher());

 

2、事务支持,事务支持需使用mssqlrepofactory.usestatementtransactionexecutor();,如果是自定义的读写器,一定不在内部关闭 connection;

 

完整的演示代码见:https://gitee.com/azthinker/sqlrepoex2.0demo

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

相关文章:

验证码:
移动技术网