Dapper同时操作任意多张表的实现
1:Dapper的查询帮助类,部分代码,其它新增更新删除可以自行扩展
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Text; namespace FEG.ESB.Data.EF
{
using Dapper;
using MySql.Data.MySqlClient;
using System.Threading.Tasks;
using static Dapper.SqlMapper; /// <summary>
///
/// </summary>
public class FEG_DapperHelper
{
private static string str = FEG_ConfigHelper.GetDbConnectionStr(); /// <summary>
/// 查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="parames"></param>
/// <returns></returns>
public static IEnumerable<T> Query<T>(string sql, object parames = null) where T : class, new()
{
try
{
using MySqlConnection conn = GetMySqlConnnetion();
return conn.Query<T>(sql, parames);
}
catch (Exception)
{
return null;
}
} /// <summary>
/// 查询 异步操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="parames"></param>
/// <returns></returns>
public static async Task<IEnumerable<T>> QueryAsync<T>(string sql, object parames = null) where T : class, new()
{
try
{
using MySqlConnection conn = GetMySqlConnnetion();
return await conn.QueryAsync<T>(sql, parames);
}
catch (Exception)
{
return null;
}
} #region old
///// <summary>
///// 查询两个实体的操作
///// </summary>
///// <param name="sql"></param>
///// <param name="parames"></param>
///// <returns></returns>
//public static Tuple<IEnumerable<T>, IEnumerable<M>> QueryTwoEntity<T, M>(string sql, object parames = null) where T : class where M : class, new()
//{
// try
// {
// using MySqlConnection conn = GetMySqlConnnetion();
// var readData = conn.QueryMultiple(sql, parames);
// var obj = readData.Read<T>() as IEnumerable<T>;
// var obj2 = readData.Read<M>() as IEnumerable<M>;
// return (obj, obj2).ToTuple();
// }
// catch (Exception)
// {
// return null;
// }
//}
#endregion /// <summary>
/// 同时查询多个实体的操作
/// </summary>
/// <param name="sql"></param>
/// <param name="funcObj"></param>
/// <param name="dicParams"></param>
/// <returns></returns>
public static void QueryMultipeEntity(string sql, Dictionary<string, object> dicParams, Action<GridReader> funcObj)
{
using MySqlConnection conn = GetMySqlConnnetion();
if (dicParams != null)
{
DynamicParameters ps = new DynamicParameters();
foreach (string item in dicParams.Keys)
{
ps.Add(item, dicParams[item]);
}
using (var readRsult = conn.QueryMultiple(sql, ps))
{
funcObj.Invoke(readRsult);
}
}
} /// <summary>
/// 获取 MySql连接
/// </summary>
/// <returns></returns>
private static MySqlConnection GetMySqlConnnetion()
{
return new MySqlConnection(str);
} /// <summary>
/// 获取Dapper参数化对象,这里直接New来处理,不到处引入命名空间
/// </summary>
/// <returns></returns>
public static DynamicParameters GetDynamicParameters()
{
return new DynamicParameters();
}
} /// <summary>
///
/// </summary>
public class FEG_ConfigHelper
{
public static IConfiguration _configuration { get; set; }
/// <summary>
/// 获取连接数据库的字符串
/// </summary>
/// <returns></returns>
public static string GetDbConnectionStr()
{
return _configuration.GetSection("ConnectionStrings:ReadonlyConnection").Value;
} /// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetAppSettingValueByKey(string key)
{
return _configuration.GetSection(key).Value;
} /// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T GetAppSettingEntity<T>(string key) where T : class, new()
{
return _configuration.GetSection(key).Value as T;
}
}
}
2:调用的代码:
/// <summary>
/// Test dapper,同时查询多个表的操作
/// </summary>
/// <returns></returns>
[HttpPost,Route("TestGridReader")]
public BasisApiResult TestGridReader()
{
BasisApiResult result = new BasisApiResult();
result.data = _personnelService.TestGridReader<FEG.ESB.Data.Model.personnel, FEG.ESB.Data.Model.course>();
return result;
}
public Tuple<IEnumerable<T>, IEnumerable<M>> TestGridReader<T, M>()
{
IEnumerable<T> plist = null;
IEnumerable<M> clist = null;
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("isdel", "0");
FEG_DapperHelper.QueryMultipeEntity("select * from personnel where isdel=@isdel limit 0,1;select * from course where isdel=@isdel limit 0,1;", dic, x =>
{
plist = x.Read<T>().ToList();
clist = x.Read<M>().ToList();
});
return Tuple.Create(plist, clist);
}
3:测试OK截图:

Dapper同时操作任意多张表的实现的更多相关文章
- 多对多第三张表的创建方式 和 forms组件的使用
目录 一.多对多第三张表的创建 1. 全自动方式 (1)实现代码 (2)优点和不足 2. 纯手撸方式(了解) (1)实现代码 (2)优点和不足 3. 半自动方式(推荐使用) (1)实现代码 (2)优点 ...
- ORM多表操作之创建关联表及添加表记录
创建关联表 关于表关系的几个结论 (1)一旦确立表关系是一对多:建立一对多关系----在多对应的表中创建关联字段. (2)一旦确立表关系是多对多:建立多对多关系----创建第三张关系表----id和两 ...
- 实现多个ContentProvider对多张表进行操作
http://blog.csdn.net/maylian7700/article/details/7365373 SQLite数据库直接操作类: DatabaseHelper.java package ...
- 一起学Hadoop——实现两张表之间的连接操作
---恢复内容开始--- 之前我们都是学习使用MapReduce处理一张表的数据(一个文件可视为一张表,hive和关系型数据库Mysql.Oracle等都是将数据存储在文件中).但是我们经常会遇到处理 ...
- (10)MySQL触发器(同时操作两张表)
什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...
- android 玩转ContentProvider之二--实现多个ContentProvider对多张表进行操作
SQLite数据库直接操作类: DatabaseHelper.java package com.jacp.database; import android.content.Context; impor ...
- 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表
第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...
- update操作多张表
sql 语句多张表UPDATE用法一.当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰.飞.飞Asp技术乐园并且要注意,当用 ...
- oracle高级查询(实例基于scott用户四张表)
oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...
随机推荐
- fiddler抓取手机模拟器数据
引自:https://blog.csdn.net/lengdaochuqiao/article/details/88170522 1.下载最新版fiddler ,强烈建议在官网下载:https://w ...
- Vulnhub -- DC1靶机渗透
信息收集 开启了 22端口,ssh服务 80,http服务 111,RPC服务 先观察80端口 发现采用的是Drupal的cms 目录爆破: 但是,没有找到可以直接利用的点 登录的页面进行SQL注入即 ...
- 用Pygal画一个英雄能力的图
效果图: 这是在google浏览器下打开的html. play.py #!/usr/bin/env python # _*_ coding: UTF-8 _*_ """= ...
- redis的单线程
一.redis为什么这么快 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1):2.数据结构简单 ...
- 1.1 MATLAB系统环境
专题一 MATLAB基础知识 1.1 MATLAB系统环境 1. 续行符(三个点) 2. 当前文件夹 先建立当前文件夹,再cd 3.工作区窗口 4.搜索路径 01当前文件夹下的程序文件 变 ...
- 3、基于Python建立任意层数的深度神经网络
一.神经网络介绍: 神经网络算法参考人的神经元原理(轴突.树突.神经核),在很多神经元基础上构建神经网络模型,每个神经元可看作一个个学习单元.这些神经元采纳一定的特征作为输入,根据自身的模型得到输出. ...
- CTF_论剑场_Web20
直接上脚本,多跑几次就能出flag import requests import re url = "http://123.206.31.85:10020/" s = reques ...
- OpenStack虚拟网络与物理网络的衔接(flat方式)
by 无若 这边以CentOS7+Liberty版本为例. 过去一段时间(Juno版本之前版本),OpenStack内的虚拟网络与真正的物理网络衔接主要使用openvswitch,其主要问题是在配置网 ...
- GUI编程简介
GUI编程(淘汰) GUI编程怎么学? 这是什么 它怎么玩 该如何去在我们平时运用 class -- 可阅读 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 鼠标 键盘事件 破解工具 1 ...
- Go语言笔记[实现一个Web框架实战]——EzWeb框架(一)
Go语言笔记[实现一个Web框架实战]--EzWeb框架(一) 一.Golang中的net/http标准库如何处理一个请求 func main() { http.HandleFunc("/& ...