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同时操作任意多张表的实现的更多相关文章

  1. 多对多第三张表的创建方式 和 forms组件的使用

    目录 一.多对多第三张表的创建 1. 全自动方式 (1)实现代码 (2)优点和不足 2. 纯手撸方式(了解) (1)实现代码 (2)优点和不足 3. 半自动方式(推荐使用) (1)实现代码 (2)优点 ...

  2. ORM多表操作之创建关联表及添加表记录

    创建关联表 关于表关系的几个结论 (1)一旦确立表关系是一对多:建立一对多关系----在多对应的表中创建关联字段. (2)一旦确立表关系是多对多:建立多对多关系----创建第三张关系表----id和两 ...

  3. 实现多个ContentProvider对多张表进行操作

    http://blog.csdn.net/maylian7700/article/details/7365373 SQLite数据库直接操作类: DatabaseHelper.java package ...

  4. 一起学Hadoop——实现两张表之间的连接操作

    ---恢复内容开始--- 之前我们都是学习使用MapReduce处理一张表的数据(一个文件可视为一张表,hive和关系型数据库Mysql.Oracle等都是将数据存储在文件中).但是我们经常会遇到处理 ...

  5. (10)MySQL触发器(同时操作两张表)

    什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...

  6. android 玩转ContentProvider之二--实现多个ContentProvider对多张表进行操作

    SQLite数据库直接操作类: DatabaseHelper.java package com.jacp.database; import android.content.Context; impor ...

  7. 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

    第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...

  8. update操作多张表

    sql 语句多张表UPDATE用法一.当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰.飞.飞Asp技术乐园并且要注意,当用 ...

  9. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

随机推荐

  1. python程序开机自启动

    windows下设置 因为服务器是windows环境 担心黑窗口不小心被关闭  因此想要让python程序在后台运行 只需要一下几步 1. 在启动python启动文件加入以下代码 import win ...

  2. 数据结构与算法(python版)

    ADT抽象数据类型(ADT:Abstract Data Type):ADT是对数据进行处理的一种逻辑描述,并不涉及如何实现这些处理. 同一ADT可以采用不同的数据结构来实现:1.采用程序设计语言的控制 ...

  3. odoo中接口开发

    文章参考:https://blog.csdn.net/qq_33472765/article/details/81913627案例0000001接口调用请求说明:https请求方式:GET(请使用ht ...

  4. KMP子串匹配(只能匹配出唯一子串)

    using namespace std; #include <iostream> #include<string> //自定义字符串存储结构String(包括char数组.le ...

  5. 利用LRU策略实现Axios请求缓存

    业务场景 前一段时间刚做完一个项目,先说一下业务场景,有别于其他的前端项目,这次的项目是直接调用第三方服务的接口,而我们的服务端只做鉴权和透传,第三方为了灵活,把接口拆的很零散,所以这个项目就像扔给你 ...

  6. Python3中datetime时区转换介绍与踩坑

    最近的项目需要根据用户所属时区制定一些特定策略,学习.应用了若干python3的时区转换相关知识,这里整理一部分记录下来. 下面涉及的几个概念及知识点: GMT时间:Greenwich Mean Ti ...

  7. phpunit 远程代码执行漏洞(CVE-2017-9841)

    影响版本 4.8.19 ~ 4.8.27 5.0.10 ~ 5.6.2 访问进行抓包 http://192.168.49.2:8080/vendor/phpunit/phpunit/src/Util/ ...

  8. FastAPI:一个测试人员视角的教程

    前言 教程肯定谈不上了,主要还是就自己的理解分享内容而已 内容是连官方文档的基础教程都没涵盖起的 建议直接看官方文档 以个人视角来分享,希望各位通过这个可以写接口了 需要自取 完整视频链接:https ...

  9. 声明提前(hoist)

    程序执行前,都会先找到var声明的变量和function声明的函数. 一.var声明的变量 程序 结果 console.log(a); var a=10; console.log(a); //unde ...

  10. noip模拟测试21

    考试总结:这次考试,前两道题的题面描述不是很清楚,导致我不知道输出格式到底是什么,挂了差不多80分(好多人也是这样),总体来说,这次考试的前两道题暴力分是打满了,最后一道题打了一个假的暴搜,在考场上没 ...