一、功能变化

(一)、强化特性支持

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 )

     public class ToDo
{
[NonDatabaseField]
public string Remark { get; set; } [SqlRepoDbField]
public DateTime CreatedDate { get; set; } [SqlRepoDbField]
public bool IsCompleted { get; set; } [SqlRepoDbField]
public string Task { get; set; } [IdentityField]
public int Id { get; set; }
}

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

     public class ToDo
{
[NonDatabaseField]
public string Remark { get; set; }
public DateTime CreatedDate { get; set; }
public bool IsCompleted { get; set; }
public string Task { get; set; } [IdentityField]
public int Id { get; set; }
}

(二)事务支持

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

MsSqlRepoFactory.UseStatementTransactionExecutor();

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

 public void DoIt2()
{
var repository = MySqlRepoFactory.Create<ToDo>();
using (var tranc = repository.GetConnectionProvider.BeginTransaction())
{
repository.Update().Set(c => c.Task, "A31").Where(c => c.Id == ).Go();// A1
repository.Update().Set(c => c.Task, "B31").Where(c => c.Id == ).Go();// B2 tranc.Rollback();
}
}

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

返回形如下列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;

         public static void TestMySqlUpdate()
{
string ConnectionString = "datasource=127.0.0.1;username=test;password=test;database=sqlrepotest;charset=gb2312;SslMode = none;";
var connectionProvider = new MySQLP.ConnectionStringConnectionProvider(ConnectionString);
MySqlRepoFactory.UseConnectionProvider(connectionProvider);
MySqlRepoFactory.UseStatementExecutor(new DapperStatementExecutor(connectionProvider));
MySqlRepoFactory.UseDataReaderEntityMapper(new DapperEntityMapper());
MySqlRepoFactory.UseWritablePropertyMatcher(new SimpleWritablePropertyMatcher());
var repository11 = MySqlRepoFactory.Create<ToDo>();
var results11 = repository11.Query().Where(c => c.Id == ).Go().FirstOrDefault(); results11.Task = "B21"; var rest2= repository11.Update().For(results11); Console.WriteLine(rest2.ParamSql()); var rest3 = rest2.ParamSqlWithEntity(); IDbConnection dbConnection = repository11.GetConnectionProvider.GetDbConnection; dbConnection.Execute(rest3.paramsql, rest3.entity);
}

二、注意事项

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

你可以

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

         [SqlRepoDbField]
public string Task { get; set; } [IdentityField]
public int Id { get; set; }

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

MsSqlRepoFactory.UseWritablePropertyMatcher(new SimpleWritablePropertyMatcher());

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

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

轻量ORM-SqlRepoEx (十二)SqlRepoEx 2.0.1 至 2.2.0 版本更新说明的更多相关文章

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

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

  2. 轻量ORM-SqlRepoEx (一)SqlRepoEx介绍

    一.SqlRepo项目 发现SqlRepo项目库是在构建自动代码工具时.对于数据访问,在.Net下,有很多选择,比如EF,但EF使用起来,不是很方便的.以前一直使用Atk.Expression库+Sy ...

  3. SqlSugar轻量ORM

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

  4. Dapper.NET——轻量ORM

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

  5. Dapper.NET—轻量ORM

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

  6. 动手打造轻量web服务器(二)路由

    tomcat启动慢?自己动手打造轻量web服务器(一) 上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?) 首先,根据http获得请求行 val scanner ...

  7. 轻量ORM-SqlRepoEx (十七)SqlRepoEx 2.30 版本更新说明

    .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,支持MySQL.SQL Server数据库方言,使用强类型操作数据的轻量级ORM工具,在减少魔法 ...

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

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

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

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

随机推荐

  1. 51Nod 算法马拉松23 开黑记

    惨啊……虽然开了半天黑,但是还是被dalao们踩了…… 第二次开黑,还是被卡在rank20了,我好菜啊……= = 写一写比赛经过吧…… 看到题之后习惯性都打开,A~D看上去似乎并没有什么思路,F应该是 ...

  2. 用webpack实现前端自动化构建

    什么是自动化的前端构建流? 1. 自动补全css私有前缀,自动转化less\sass为css,自动转化es6\vue\jsx语法为js,自动打包小图片为base64以减少http请求,自动给js,cs ...

  3. java编写银行管理 。ATM管理

    package Demo; import java.util.Date; import java.util.Scanner; //date是数据库中的一个用法,初始化后输出的是操作时的时间 publi ...

  4. CentOS 7 yum 安装 Nginx

    1.添加Nginx到YUM源 添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令: sudo rpm -Uvh http://nginx.org/packages/centos/7 ...

  5. Linux常用命令(三)————创建+删除+设置权限

    1. mkdir mkdir [选项] DirName 命令中的[选项]: -m    用于对新建目录设置存取权限,也可以用 chmod 命令进行设置. -p     需要时创建上层文件夹(或目录), ...

  6. oracle 帐号scott被锁定 如何解锁

    由于多次输入:账号 密码不对 oracle 帐号scott被锁定 如何解锁: 具体操作步骤如下:C:> sqlplus请输入用户名:sys输入口令:sys as sysdba //注意:在口令这 ...

  7. 沉淀再出发:redis的安装和使用

    沉淀再出发:redis的安装和使用 一.前言 下面让我们看看Redis这个键值对内存数据库的使用方法和相关注意事项. 二.Redis的安装和使用 2.1.Redis的定义 REmote DIction ...

  8. redis下的字符串处理

    redis设计一款sds对象[字符串对象] 优点:可跨平台的内存处理zmalloc:内存消耗的线性增长优势:每次加SDS_MAX_PREALLOC(1MB)的空间: 重写了各种字符串操作的函数: 写跨 ...

  9. Source InSight context 窗口丢失的解决办法

    我没关si的情况下强制关机导致的 Source InSight context 窗口丢失的解决办法 (2010-09-03 13:35:45) 转载▼     今天早晨改改CLI,上了趟WC,回来发现 ...

  10. 【Win10+eclipse+MinGW+QT安装教程】已有eclipse环境下配置QT插件出错详解

    (纪念一下装了一整天濒临绝望的自己[/doge]) (以下所有下载项一律使用32位) step1:下载安装eclipse.适配的jdk.MinGW和QT 1.下载32位eclipse for c++以 ...