dbconnection

C# 数据操作系列

…衆ロ難τιáo~ 提交于 2020-08-05 21:06:15
0. 前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。 1. NHibernate结构 先给小伙伴们放个图: 这是NHibernate的整体结构图。NHibernate通过ADO.NET 建立访问数据库的连接,然后封装了一个Transaction(事务)工厂和一个Session工厂。每次操作的时候,通过两个工厂获取对应的Session/Transaction示例操作数据对象。 ISessionFactory - NHibernate.ISessionFactory: 一个基于单数据库的已编译的映射缓存,它是持久不变的且线程安全(额,这句话是从它的文档翻译过来的)。是一个提供ISession的工厂类,同时也是一个 IConnectionProvider的客户端。可以设置一个在事务之间的进程级或集群级的二级缓存。 ISession - NHibernate.ISession: 一个单线程、短生命周期的对象,表示从应用程序和数据持久化之间一个连接。一个ADO.NET连接的封装,用来提供ITransaction的工厂。提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。 Persistent Objects and

从封装变化的角度看设计模式——对象创建

99封情书 提交于 2020-08-05 19:56:44
封装变化之对象创建 在对象创建的过程中,经常会出现的一个问题就是通过显示地指定一个类来创建对象,从而导致紧耦合。这是因为创建对象时指定类名将使你受特定实现的约束而不是特定接口的约束。这会使未来的变化更加复杂。要避免这种情况,就应该间接地创建对象。 这种紧耦合的问题很大程度是由new关键字带来的,由于new的紧耦合出现,使得紧耦合的类很难独立地被复用,因为它们之间是相互依赖的。并且紧耦合产生单块的系统,要改变或者删掉一个类,就必须要理解和改变其他许多类。这也是导致系统难以维护和移植的一个重要原因。 所以可以通过“对象创建”模式绕开new,从而避免在对象创建(new)过程中所导致的紧耦合(依赖具体的类),以此支持对象创建的稳定。 那么如何避免new呢?举个例子! public void fun1(){ //... Product p = new Product(); //改为:Product p = productFactory.createProduct(); //... } 这样的方式就是通过一个工厂调用一个方法来创建相应的产品,但是可能大家又会产生一个问题,这样操作虽然解决了 Product 的new操作,但是对于 ProductFactory 而言不是也需要通过new来产生吗? 对于这个问题,我想是很多人在接触到设计模式的时候都会去思考的问题,既然 ProductFactory

C# 数据操作系列

若如初见. 提交于 2020-07-24 04:13:46
0. 前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。 1. NHibernate结构 先给小伙伴们放个图: 这是NHibernate的整体结构图。NHibernate通过ADO.NET 建立访问数据库的连接,然后封装了一个Transaction(事务)工厂和一个Session工厂。每次操作的时候,通过两个工厂获取对应的Session/Transaction示例操作数据对象。 ISessionFactory - NHibernate.ISessionFactory: 一个基于单数据库的已编译的映射缓存,它是持久不变的且线程安全(额,这句话是从它的文档翻译过来的)。是一个提供ISession的工厂类,同时也是一个 IConnectionProvider的客户端。可以设置一个在事务之间的进程级或集群级的二级缓存。 ISession - NHibernate.ISession: 一个单线程、短生命周期的对象,表示从应用程序和数据持久化之间一个连接。一个ADO.NET连接的封装,用来提供ITransaction的工厂。提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。 Persistent Objects and

findbug、p3c、checkstyle、sonar安装使用

社会主义新天地 提交于 2020-05-02 06:11:03
idea插件安装方式: Preferences—>Plugins—>查找插件—>Install Preferences—>Plugins—>Install plug from disk —>选择下载好的插件—>安装 p3c: 官方安装使用手册: https://github.com/alibaba/p3c/blob/master/idea-plugin/README_cn.md 便捷使用: 实时检测+手动选择编码规约扫描(使用快捷键ctrl+shift+alt+j或者鼠标右键弹出菜单) 错误提示(ctrl+f1) 快速修改(alt+enter) 缺陷级别: 1.Blocker, 2.Critical, 3.Major; FindBugs-IDEA: 离线安装包下载地址: https://plugins.jetbrains.com/plugin/download?rel=true&updateId=29582 安装使用参考文档: http://blog.csdn.net/qq_27093465/article/details/64923239 便捷使用: 选择文件或项目后鼠标右键选择FindBugs 缺陷级别: 1.Bad pratice编程的坏习惯 2.Malicious code vulnerability 恶意代码漏洞 3.Dodgy code 糟糕的代码 4

.NetCore学习笔记:二、基于Dapper的泛型Repository

耗尽温柔 提交于 2020-04-27 04:20:05
为减少代码量,这里实现一个基于Dapper的泛型Repository。 这里需要引用Dapper.dll和Dapper.Contrib.dll。 接口定义: 1 /// <summary> 2 /// Repository接口 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public interface IRepository<T> where T : class , IEntity 6 { 7 /// <summary> 8 /// 查询 9 /// </summary> 10 /// <typeparam name="T"></typeparam> 11 /// <param name="sql"></param> 12 /// <param name="param"></param> 13 /// <param name="commandType"></param> 14 /// <returns></returns> 15 IEnumerable<T> Query( string sql, object param = null , CommandType? commandType = null ); 16 17 /// <summary> 18 /// 删除行数据 19 /// </summary>

.NetCore学习笔记:二、基于Dapper的泛型Repository

坚强是说给别人听的谎言 提交于 2020-04-26 13:31:29
为减少代码量,这里实现一个基于Dapper的泛型Repository。 这里需要引用Dapper.dll和Dapper.Contrib.dll。 接口定义: 1 /// <summary> 2 /// Repository接口 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public interface IRepository<T> where T : class , IEntity 6 { 7 /// <summary> 8 /// 查询 9 /// </summary> 10 /// <typeparam name="T"></typeparam> 11 /// <param name="sql"></param> 12 /// <param name="param"></param> 13 /// <param name="commandType"></param> 14 /// <returns></returns> 15 IEnumerable<T> Query( string sql, object param = null , CommandType? commandType = null ); 16 17 /// <summary> 18 /// 删除行数据 19 /// </summary>

.NetCore学习笔记:三、基于AspectCore的AOP事务管理

时光总嘲笑我的痴心妄想 提交于 2020-04-26 13:30:37
AOP(面向切面编程),通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AspectCore 提供了一个全新的轻量级和模块化的Aop解决方案,现在已经支持Asp.Net Core。 实现AOP类TransactionalAttribute: 1 /// <summary> 2 /// 为工作单元提供事务一致性 3 /// </summary> 4 public class TransactionalAttribute : AbstractInterceptorAttribute 5 { 6 IUnitOfWork _unitOfWork { get ; set ; } 7 8 public async override Task Invoke(AspectContext context, AspectDelegate next) 9 { 10 try 11 { 12 _unitOfWork = context.ServiceProvider.GetService( typeof (IUnitOfWork)) as IUnitOfWork; 13 _unitOfWork

.NetCore学习笔记:三、基于AspectCore的AOP事务管理

℡╲_俬逩灬. 提交于 2020-04-26 13:00:31
AOP(面向切面编程),通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AspectCore 提供了一个全新的轻量级和模块化的Aop解决方案,现在已经支持Asp.Net Core。 实现AOP类TransactionalAttribute: 1 /// <summary> 2 /// 为工作单元提供事务一致性 3 /// </summary> 4 public class TransactionalAttribute : AbstractInterceptorAttribute 5 { 6 IUnitOfWork _unitOfWork { get ; set ; } 7 8 public async override Task Invoke(AspectContext context, AspectDelegate next) 9 { 10 try 11 { 12 _unitOfWork = context.ServiceProvider.GetService( typeof (IUnitOfWork)) as IUnitOfWork; 13 _unitOfWork

.NetCore学习笔记:二、基于Dapper的泛型Repository

时光总嘲笑我的痴心妄想 提交于 2020-04-26 11:39:14
为减少代码量,这里实现一个基于Dapper的泛型Repository。 这里需要引用Dapper.dll和Dapper.Contrib.dll。 接口定义: 1 /// <summary> 2 /// Repository接口 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public interface IRepository<T> where T : class , IEntity 6 { 7 /// <summary> 8 /// 查询 9 /// </summary> 10 /// <typeparam name="T"></typeparam> 11 /// <param name="sql"></param> 12 /// <param name="param"></param> 13 /// <param name="commandType"></param> 14 /// <returns></returns> 15 IEnumerable<T> Query( string sql, object param = null , CommandType? commandType = null ); 16 17 /// <summary> 18 /// 删除行数据 19 /// </summary>

.NetCore学习笔记:三、基于AspectCore的AOP事务管理

巧了我就是萌 提交于 2020-04-26 11:29:45
AOP(面向切面编程),通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 AspectCore 提供了一个全新的轻量级和模块化的Aop解决方案,现在已经支持Asp.Net Core。 实现AOP类TransactionalAttribute: 1 /// <summary> 2 /// 为工作单元提供事务一致性 3 /// </summary> 4 public class TransactionalAttribute : AbstractInterceptorAttribute 5 { 6 IUnitOfWork _unitOfWork { get ; set ; } 7 8 public async override Task Invoke(AspectContext context, AspectDelegate next) 9 { 10 try 11 { 12 _unitOfWork = context.ServiceProvider.GetService( typeof (IUnitOfWork)) as IUnitOfWork; 13 _unitOfWork