轻量ORM-SqlRepoEx (十二)SqlRepoEx 2.0.1 至 2.2.0 版本更新说明
一、功能变化
(一)、强化特性支持
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 版本更新说明的更多相关文章
- 轻量ORM-SqlRepoEx   (十)SqlRepoEx  Nuget包下载说明
		ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ... 
- 轻量ORM-SqlRepoEx (一)SqlRepoEx介绍
		一.SqlRepo项目 发现SqlRepo项目库是在构建自动代码工具时.对于数据访问,在.Net下,有很多选择,比如EF,但EF使用起来,不是很方便的.以前一直使用Atk.Expression库+Sy ... 
- SqlSugar轻量ORM
		蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ... 
- Dapper.NET——轻量ORM
		Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ... 
- Dapper.NET—轻量ORM
		Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1 一 ... 
- 动手打造轻量web服务器(二)路由
		tomcat启动慢?自己动手打造轻量web服务器(一) 上篇讲了怎么做一个最简单的web服务器,这篇就是在上篇加上URL路由功能(什么是路由?) 首先,根据http获得请求行 val scanner ... 
- 轻量ORM-SqlRepoEx (十七)SqlRepoEx 2.30 版本更新说明
		.Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,支持MySQL.SQL Server数据库方言,使用强类型操作数据的轻量级ORM工具,在减少魔法 ... 
- 轻量ORM-SqlRepoEx (十四)最佳实践之Dapper(1)
		简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程 ... 
- 轻量ORM-SqlRepoEx (十六)最佳实践之Dapper(2)
		简介:SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程 ... 
随机推荐
- 理解bind函数
			前言:之前一直不懂这个函数是干嘛的,最近慢慢有点懂了,说一说自己的理解~ 本文按以下3个方面来谈谈bind函数 1)对bind函数的理解: 2)如何使用bind函数 3)自定义bind函数 (http ... 
- WPF使用样式更新ArcGis InfoWindow外观代码
			<Style x:Key="mainInfoWindowStyleMF" TargetType="{x:Type esri:InfoWindow}"> ... 
- AutoCAD LoadLibrary Failed with error 126 Message
			LoadLibrary Failed with error 126 Message BY C3DISH ON 26 MAY, 2013 · ADD COMMENT I wanted to post a ... 
- SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
			SSM 框架-03-MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建 如果你是使用 Eclipse 你需要先安装 MyEclipse,请参考:SSM 框架-02-MyEclipse ... 
- Week2——提交表单后后台的工作
			在我理解看来,发生请求后主要是通过域进行相互间的协调作用的.表单数据可以从request域中获得,也可以通过response域返回数据给前台. 当发起http请求后,已经启动的Tomcat服务器解析收 ... 
- 数值的整数次方(C++ 和 Python 实现)
			(说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 实现函数 double Power(double base, ... 
- 构建微软智能云:介绍新的Azure业务转型创新技术
			在我和用户的交流中发现,在任何类型和规模的组织中,每当涉及到在云中实现商业价值的最大化并取得竞争优势的时候,就会明显呈现三个趋势.首先,应用程序促进着组织更快速实现价值.同时,诸如机器学习.数据预测分 ... 
- Java学习---TCP Socket的学习
			基础知识 1. TCP协议 TCP是一种面向连接的.可靠的.基于字节流的运输层(Transport layer)通信协议.在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层 ... 
- [Codeup 25482] Beauty
			25482: Beauty 时间限制: 1 Sec 内存限制: 128 MB献花: 7 解决: 3[献花][花圈][TK题库] 题目描述 一年一度的星哥选美又拉开了帷幕 N个人报名参加选拔,每个人 ... 
- KVO 的进一步理解
			这篇文章讲述了KVO的深入理解 http://blog.csdn.net/kesalin/article/details/8194240 对kvo有了更深入的理解 如下连接的文章讲述了kvo接口的一些 ... 
