目录

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)开启的IDbConnection与IDbTransaction并且如果事务

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

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

的IDbConnection与IDbTransaction

框架开源,完整框架源码可以去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. python编程基础之二

    交互式: 此处以windows为例:开始->运行->cmd,输入python 交互式界面 优点:即时,所见即所得 缺点:代码不可复用,根本无法进行维护 退出:exit() 代码是顺序执行: ...

  2. 0基础学Java快速扫盲指南,月入2W的基础

    学Java,掌握一些基本的概念是第一步,本文简单为大家介绍一些扫盲级别的内容,希望帮助小白快速入门. 一.基本概念 JVM:java虚拟机,负责将编译产生的字节码转换为特定机器代码,实现一次编译多处执 ...

  3. Be a Winner 当成功者

    Winners see opportunities. Losers see. Winners see possibilities. Losers see problems. Winners see t ...

  4. jQuery v1.10.2如何判断checkbox(复选框)是否被选中

    做项目时,我们经常会用到jquery来做一些判断,今天自己遇上判断复选框是否选中,然后搜索查看,发现现在网上的都是错误的,下面罗列错误的: 1.$("#id").attr(&quo ...

  5. ThinkPHP架构(一)-TP原理及路径问题及后台实现实例

    一直用CSDN的博客,由于域名当时注册写的不合适,现在想来博客园写博客,以后要坚持写啦,记录自己的技术学习路程 本人两个月前,刚完成基于PHP的研会门户网站,虽然实现了基本功能,但感觉技术有些单薄,便 ...

  6. jquery 获取input的值

    $("input").attr("value")   --  获取的是input的默认值 $("input").val()         ...

  7. [HNOI2013][BZOJ3143] 游走 - 高斯消元

    题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边 ...

  8. opencv::卷积运算函数filter2D()

    opencv::卷积运算函数filter2D() 使用掩模板矩阵(kernel)计算每个像素值 与原图相比,没有黑边 int main(int argc, char** argv) { Mat src ...

  9. 基于Prometheus和Grafana的监控平台 - 运维告警

    通过前面几篇文章我们搭建好了监控环境并且监控了服务器.数据库.应用,运维人员可以实时了解当前被监控对象的运行情况,但是他们不可能时时坐在电脑边上盯着DashBoard,这就需要一个告警功能,当服务器或 ...

  10. Centos7 安装需要的软件环境

    Mysql 安装 下载安装 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-rel ...