目录

3.1.8版本增加新功能仓储模式

Kogel.Repository 作为扩展,现实了通用仓储层功能。与其他规范标准一样,仓储层也有相应的规范定义

1.安装

使用仓储模式需要安装扩展包Kogel.Repository,可在Nuget上搜索最新版本

或者使用Nuget命令

dotnet add package Kogel.Repository

2.定义

public class TestRepository : BaseRepository<Comment>//Comment为实体类
{
public override void OnConfiguring(RepositoryOptionsBuilder builder)
{
builder
.BuildConnection(new MySqlConnection("Server=localhost;Database=Qx_Sport_Common;Uid=root;Pwd=A5101264a;"))//配置连接方式
.BuildProvider(new MySqlProvider());//配置数据库提供者 }
}

用此方法可以根据自身需求配置多数据库

3.使用方法

1.支持原生Kogel.Dapper.Extension的方法

using (TestRepository testRepository = new TestRepository())
{
var querySet = testRepository.QuerySet();//查询对象
var commandSet = testRepository.CommandSet();//执行对象
}

或者使用事务中的Orm属性

using (TestRepository testRepository = new TestRepository())
{
var comment = testRepository.Orm.QuerySet<Comment>().ToList();
}

此Orm属性相当于仓储创建时产生的IDbConnection

还支持基础的增删改查

/// <summary>
/// 根据主键获取当前实体数据
/// </summary>
/// <returns></returns>
T FindById(int id);
/// <summary>
/// 增加
/// </summary>
/// <returns></returns>
int Insert(T entity);
/// <summary>
/// 删除(根据主键)
/// </summary>
/// <returns></returns>
int Delete(int id);
/// <summary>
/// 修改(根据主键)
/// </summary>
/// <returns></returns>
int Update(T entity);

  

2.UnitOfWork

UnitOfWork 可将多个数据库操作放在一个单元管理执行,最终通用 Commit 执行所有操作,内部采用了数据库事务;

例如

using (TestRepository testRepository = new TestRepository())
{
//开始事务
testRepository.UnitOfWork.BeginTransaction(() =>
{
var comment = testRepository.Orm.QuerySet<Comment>().ToList(); testRepository.Orm.CommandSet<Comment>()
.Where(x => x.Id == comment.FirstOrDefault().Id)
.Update(comment.FirstOrDefault());
//其他仓储类代码块
new TestRepositoryQuery1().Test();
});
//提交
testRepository.UnitOfWork.Commit();
}

其他仓储类的代码块也会进入此单元管理的事务中,因为他们都将会用指定方(testRepository)开启的IDbConnectionIDbTransaction并且如果事务

中的代码块异常,会第一时间回滚并且抛出异常

       如果工作单元事务中存在其他数据库连接方式(根据连接字符串判断)的查询编辑语句,则会使用自身的连接和事务不会用指定方(testRepository)开启

IDbConnectionIDbTransaction

框架开源,完整框架源码可以去Github上下载:

https://github.com/a935368322/Kogel.Dapper.Extension

如有问题也可以加QQ群讨论:

技术群 710217654

[LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式的更多相关文章

  1. [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper 支持.net framework4.5.1 ...

  2. [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  3. [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射

    此特性需要安装Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,实体类层需要安装Kogel.Dapper.Extension 3.06及以上版本 目录 [LINQ2Dapper ...

  4. [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  5. [LINQ2Dapper]最完整Dapper To Linq框架(五)---查看Linq实际执行的SQL

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper支持.net framework4.6.1及 ...

  6. [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表联合与匿名类型返回

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  7. [LINQ2Dapper]最完整Dapper To Linq框架(八)---导航属性

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  8. MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...

  9. EntityFramework、Dapper vs 草根框架性能

    EntityFramework.Dapper vs 草根框架性能 扯淡 当前市面上 ORM 很多,有跑车型的,如 Dapper,有中规中矩型的,如 Mybatis.Net,也有重量型的,如 Entit ...

随机推荐

  1. JDK1.7中HashMap死环问题及JDK1.8中对HashMap的优化源码详解

    一.JDK1.7中HashMap扩容死锁问题 我们首先来看一下JDK1.7中put方法的源码 我们打开addEntry方法如下,它会判断数组当前容量是否已经超过的阈值,例如假设当前的数组容量是16,加 ...

  2. python编程基础之三

    变量 变量定义:变量名 = 值  #不需要给定变量类型 变量命名规范:也就是标识符的命名规则, 1.由数字,字母,下划线组成,不允许数字开头 2.区分大小写 3.不能是系统保留字(keyword) 获 ...

  3. C语言-查找一个元素在数组中的位置

    #include<stdio.h> #include <stdlib.h> #include <time.h> int search(int key, int a[ ...

  4. 简单自定义mybatis流程!!

    ----简单自定义mybatis流程----一.首先封装daoMapperxml文件和sqlMapconfig配置文件,如何封装:(1).封装我们的Mapper.xml文件,提取名称空间namespa ...

  5. 算数运算符and数据类型转换

    一元(单目)运算符有且只有一个运算参数,二元(双目)运算符有且只有两个运算参数. 二元运算符:+(加).-(减).*(乘)./(求商).%(求余) 一元运算符:+(正),-(负),++(自增),--( ...

  6. ElasticSearch安装SQL插件

    ElasticSearch安装SQL插件下载地址(中国大佬开发的,膜拜ing):https://github.com/NLPchina/elasticsearch-sql 1.记得选择和自己Elast ...

  7. web前端开发自学路线是怎样的?html+css+JavaScript的学习方法?

    不废话,直接干货 学习前端的几个个阶段: 一阶段:html标签.html5新增标签.css样式.css3样式.媒体查询等 二阶段:JavaScript.jQuery.ajax.面向对象.http传输协 ...

  8. Windows常用操作

    目录 查询IP地址 常用快捷键 显示文件后缀名 查询IP地址 1.进入到dos界面 2.输入命令: ipconfig 常用快捷键 快捷键 作用 win+E 打开计算机 win+R 打开运行 win+R ...

  9. 生产环境中利用软链接避免"rm -rf /"的方法

      1.将系统中的rm二进制文件重命名为rm_real:2.编写脚本rm_shell,rm_shell中主要包含以下内容:    2.1)路径转换模块,用于将rm_shell参数中的路径转换为绝对路径 ...

  10. libevent::bufferevent

    #include <cstdio> #include <netinet/in.h> #include <sys/socket.h> #include <fcn ...